精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何排查網頁在哪里發生了內存泄漏?

開發 前端
今天我們來學習用 Devtool 的 Performance 和 Memory 工具來找出網頁哪里發生了內存泄漏。

大家好,我是前端西瓜哥。

今天我們來學習用 devtool 的 Performance 和 Memory 工具來找出網頁哪里發生了內存泄漏。

Performace 面板

首先我們打開瀏覽器的 devtool,選擇 Performance(性能)面板,然后將 Memory 選項勾選上。不勾選的話,就不會記錄內存使用情況,內存泄漏分析就無從說起了。

然后進行性能數據收集:

  1. 點擊左上角的 “錄制” 按鈕(一個灰色的圓形),或者點它旁邊的 “刷新” 按鈕,會重新加載頁面并開始記錄,這樣就不用手動刷新然后手忙腳亂地點錄制按鈕了;
  2. 在頁面上執行可能發生內存泄漏的操作,比如打開一個彈窗,然后再關閉;
  3. 差不多了就再點擊 “錄制” 按鈕,結束錄制,然后出現下面圖片的結果。

圖片

查看內存指標

看看內存的使用情況。有這么幾步:

  1. 選中要分析的范圍;
  2. 選中 Main(主線程)。只有選中的話,內存圖表才能顯示主線程對應的信息;
  3. 查看內存圖表的指標。

圖片

內存圖表是一些折線圖,記錄了內存指標隨時間發生的變化。這些內存指標有:JS 堆內存、Document 數、節點數、綁定監聽器數量、GPU 內存。

點擊它們可顯示或隱藏對應的折線圖。

對于  JS Heap(11.9MB - 25.6MB) ,它表示的是在當前時間范圍內,JS 堆內存最小值為 11.9 MB,最大為 25.6 MB。

將光標懸停在折線圖上,可以看到對應的值:

圖片

查看內存下限的變化

內存會增長是正常的現象。比如我們調用函數,會創建一些臨時變量,導致內存升高。函數執行完,這些變量就沒用了,但不會馬上回收,而是會在適當的時機進行內存回收,將內存再降下去。

臨時分配的短命內存我們并不關心,我們更關注的是一些常駐的內存,對應的要看的是 內存下限的變化。

圖片

如果內存下限不斷上升,說明常駐內存變大了。大多數情況下是正常的,比如:

  1. 調用函數,將函數返回的結果進行緩存;
  2. 創建新的組件。

也可能是內存泄漏了。

當懷疑是內存泄漏時,我們就可以使用 Memory 面板記錄快照,做進一步的排查。

Memory 面板

打開 Memory 面板,點擊左上角的 “錄制按鈕”,生成當前時刻的堆內存快照。然后通過快照了解 JS 對象的內存分布

圖片

Summary View

快照結果默認會展示為 概要視圖(Summary View)。

圖片

這個表格的表格項是基于構造函數進行歸類的。可以看到有不少原生的構造函數,還有一堆閉包。

每個項有以下幾個屬性:

  • Constructor:構造函數。對于沒有構造函數的字面量,用類似(string)? 、(array) 的表示。
  • Distance:到根節點的最短路徑。
  • Shallow Size:自己占用的內存大小,不包括它引入的其他對象內存,單位為字節。
  • Retained Size:對象自己以及它引用的對象的內存,單位也是字節。
  • Object Count:對象數量,就是 Constructor 名旁邊那個數字。

上面是默認的 Summary View 視圖。

除了它,我們還有其他的視圖,可以像下面這樣進行視圖類型的切換。

圖片

Comparison View

比較視圖(Comparison View)則是用來比較兩個快照的變化。

圖片

這里我選中了快照 3,然后將對比快照設置為 快照 1。

這個表格表示從快照 1 變成快照 3 發生的變化。沒有發生變化的項不會進行展示。

字段有:

  • Constructor:構造函數。
  • #New:新增的對象數量。
  • #Deleted:刪除的對象數量。
  • #Delta:總體上的對象變化數量。
  • Alloc.Size:分配的總內存。
  • Freed Size:釋放了多少內存。
  • Size Delta:總體上的內存變化。

Containment View

該視圖可以讓我們從根節點為起點,往下去查看各種對象占用的內存,以及被創建的代碼位置等信息。

圖片

字段:

  • Object:普通對象或者 DOM 節點:
  • Distance:到根節點的距離。
  • Shallow Size:對象大小,不計算引用的對象。
  • Retained Size:對象大小,但其引用的對象大小也計算在內。

Statistics View

圓環統計表。

各種內存類型的占總內存的百分比情況。

圖片

使用 Memory 面板注意事項

盡量減少干擾項的影響力。

  1. 分辨正常的內存變化會的干擾。
  2. 注意開發環境的打包器熱加載邏輯等的影響。
  3. 生成環境的代碼是混淆過的,一些構造器名字很奇怪,如果可以的話,本地打包一份沒經過混淆過的代碼做 debug。或者也可以 hover 看看對象結構猜測對應構造器,但效率不高。
  4. 不要有瀏覽器插件,它們也占用和影響內存,可以用無痕瀏覽器。

常見內存泄漏原因和排查

忘記及時取消監聽器綁定

新手老鳥都容易犯的錯誤,就是 忘記及時取消監聽器綁定。它會導致:

  1. 監聽器函數中的對象遲遲不能釋放,比如非常大的組件實例。
  2. 綁定大量無用的監聽器函數。

怎么排查?

如果監聽器是綁定到 DOM 中,我們可以不斷執行可以看 Listener 數量的變化。

我寫了個彈窗組件,它會在掛載時給 document.body 注冊一個函數,然后這個函數會用到這個組件下的變量。但銷毀時不取消注冊。

打開 Performance 面板,錄制,然后不停打開和關閉彈窗,然后結束錄制。我們就能看這個 Listeners 的數量的變化,不斷地變高那就是忘了。

圖片

也可以看看 Memoery 面板中 Comparison View 的快照對比中,EventListener 數量的變化:

圖片

具體是哪個,可以看 EventListener 下的最后幾個對象。

圖片

點擊這個藍色的鏈接,就能跳到對應的代碼位置:

圖片

此外,還可以用 Chrome 控制臺提供的 getEventListeners(element) 方法,它會返回一個元素事件綁定的函數有哪些。這個方法不是標準方法,是 Chrome 自帶的工具方法,只能在控制臺上用。我們可以寫個方法,從根節點往下找,找出綁定函數數量最多的節點,這個節點多得離譜那就大概率是忘了解綁。

如果不是 DOM 上的監聽器,比如發布訂閱庫的事件集合,那就要看構造器對應對象數量的變化了。

閉包

閉包就是拿到函數 A 內的另一個函數 B,函數 B 會捕獲到函數 A 作用域中的變量。

這個就導致了對一些對象的隱式引用,比如一個 DOM 元素。我們需要在不需要使用時將其設置為 null。

我們可以看看有沒有什么 Detached 的元素。Detached 表示不在當前文檔樹上,如果持續增多,可能發生了內存泄漏。

圖片

說真的閉包是一個正常的特性,沒理由和內存泄漏有關才是。

函數 B 被持有不銷毀,自然它捕獲的函數 A 中的變量就不能銷毀,和對象里有一些屬性,這些屬性不能銷毀沒啥區別。函數 B 銷毀了,對應的變量自然也就回收了。

有空我再研究下寫篇專題。

console

“你到底都打印了些什么啊?”

還有個比較常見的就是,在開發的時候用 console 打印一些對象,合并到主分支又忘記去掉。這些對象是不會被回收的,因為開發者可能會去控制臺看看這些對象的內容。這在打印大量大對象時會出性能問題。

排查方法很簡單,去看 DevTool 的控制臺輸出了什么內容,看看有沒有大對象。

一些有助于 debug 的 console 是有必要的,但不要濫用。

集合類型的緩存爆炸

我們經常用對象、數組、Map、Set 等集合類型,去做數據的緩存。

當緩存大量對象時,會占用大量的內存,但其中有不少內容是不需要用的。對于前端來說,內存不像后端那樣純金寸土,動不動就是大批量數據要處理,緩存使用起來挺隨意的。

對于緩存問題,還要要有點意識,我們可以:

  1. 使用 LRU 算法,將最久沒使用的緩存移除,控制緩存數量;
  2. 設置緩存過期時間;
  3. 對于臨時緩存,考慮使用  WeakMap 和 WeakSet,它們會在 GC 時強制回收;

這些就沒啥好分析的,就看看內存下限變化,某些對象是否變大變多了。

結尾

今天帶大家簡單入門了 devtool 提供的內存分析工具,但光說不練假把式,還是要多多實戰。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-12-18 10:45:23

內存泄漏計算機服務器

2025-08-04 01:00:00

JavaScript內存泄漏前端

2021-01-18 08:23:23

內存時底層CPU

2025-08-13 13:03:53

內存泄漏場景

2019-09-16 17:16:29

Hadoop數據湖數據結構

2021-08-09 09:54:37

內存泄漏JS 阿里云

2021-08-05 15:28:22

JS內存泄漏

2025-06-26 02:14:00

Java本地內存排查方法

2019-11-12 14:41:41

Redis程序員Linux

2024-11-22 09:40:18

Visual內存泄漏內存

2020-11-02 09:48:35

C++泄漏代碼

2019-12-17 10:01:40

開發技能代碼

2024-11-21 09:30:38

內存泄漏CPU

2020-08-17 12:47:07

Mozilla裁員瀏覽器

2013-12-17 15:46:04

iOS開發iOS 內存泄漏

2021-01-18 14:04:49

java監控操作

2022-02-08 17:17:27

內存泄漏排查

2022-05-26 09:51:50

JavaScrip內存泄漏

2011-08-15 10:16:55

內存泄露

2010-02-07 09:00:29

AndroidLinux Kerne
點贊
收藏

51CTO技術棧公眾號

成人国产一区| 91大神在线网站| 国产一区成人| 这里只有精品久久| 日本少妇一区二区三区| free性m.freesex欧美| 国产网红主播福利一区二区| 91中文字幕在线观看| 日韩欧美亚洲一区二区三区| 人人狠狠综合久久亚洲婷| 日韩精品中午字幕| 色婷婷综合久久久久中文字幕| 黄色成年人视频在线观看| 99久久久无码国产精品| 成人有码在线播放| av黄色在线播放| 午夜精品电影| 伊人成人开心激情综合网| 亚洲妇女无套内射精| 亚洲第一会所| 精品国产31久久久久久| 日韩人妻精品一区二区三区| 九色在线免费| 99免费精品在线| 国产日韩欧美在线播放| 亚洲成人av影片| 国产在线不卡| 久久久久999| 综合 欧美 亚洲日本| 少妇久久久久| 亚洲第一偷拍网| 无套内谢丰满少妇中文字幕 | 国产情侣av在线| 久久国产66| 97成人精品视频在线观看| 亚洲最大的黄色网址| 日韩系列欧美系列| 亚洲欧美日韩网| 超碰男人的天堂| 成人动漫视频| 精品女同一区二区| 亚洲色图欧美自拍| 四虎精品一区二区免费| 欧美亚洲国产一区二区三区va| 亚洲 欧美 日韩 国产综合 在线 | 91精产国品一二三| 91麻豆精品国产综合久久久 | 激情成人综合| 欧美国产亚洲视频| 麻豆chinese极品少妇| 91国语精品自产拍| 久久精品小视频| 欧美h片在线观看| 91亚洲一区| 日韩在线视频网站| 熟女少妇a性色生活片毛片| 久久国产电影| 久热精品视频在线| 永久免费看黄网站| 欧美精品观看| 午夜精品久久久久久久久久久久 | caopeng在线| 亚洲人吸女人奶水| 日韩免费在线观看av| 国产偷倩在线播放| 天涯成人国产亚洲精品一区av| 九九九九免费视频| 成人做爰免费视频免费看| 欧美性做爰猛烈叫床潮| xxxx在线免费观看| 日韩三级久久| 亚洲精品久久久久国产| 强伦人妻一区二区三区| 日韩理论电影大全| 不卡中文字幕av| 国产极品在线播放| 亚洲欧美视频| 成人性教育视频在线观看| www.日日夜夜| 99国产精品久久久久久久久久| 欧美日韩精品一区| 精品51国产黑色丝袜高跟鞋| 亚洲综合在线观看视频| 国产l精品国产亚洲区久久| 日本肉肉一区 | 国产裸体写真av一区二区| 国产美女永久免费| 91原创在线视频| 亚洲蜜桃av| av成人影院在线| 在线精品视频小说1| 亚洲图片 自拍偷拍| 好吊妞国产欧美日韩免费观看网站| 亚洲欧洲日韩国产| 成人免费视频网站入口::| 日韩亚洲国产精品| 成人久久18免费网站图片| 手机看片1024国产| 精品中文一区| 最近2019年日本中文免费字幕| a在线视频播放观看免费观看| 国产精品婷婷| 91在线观看免费高清| 香蕉视频黄在线观看| 国产精品久久久久影院亚瑟 | 欧美精品一区在线发布| 国产精品久久久久久福利| 黄网动漫久久久| 人人爽人人爽av| 亚洲第一福利专区| 欧美另类交人妖| 久久久久久无码精品大片| 国产a视频精品免费观看| 天天人人精品| 中文在线免费视频| 日韩欧美国产1| 午夜激情福利电影| 久久不射中文字幕| 国新精品乱码一区二区三区18| 免费在线看a| 91国偷自产一区二区使用方法| 欧美xxxx日本和非洲| 婷婷亚洲图片| 国产欧美亚洲精品| 国产视频第一页在线观看| 午夜影院久久久| 99国产精品免费视频| 日韩欧美一区二区三区在线视频| 日本精品久久久久久久| 头脑特工队2在线播放| 亚洲一区在线电影| 性xxxxxxxxx| 国产精品v日韩精品v欧美精品网站| 成人国产亚洲精品a区天堂华泰| 精品电影在线| 色嗨嗨av一区二区三区| 女人又爽又黄免费女仆| 亚洲一区日本| 久久精品99| 国模精品视频| 日韩精品极品在线观看| 免费在线不卡视频| 99久精品国产| 久久无码高潮喷水| 小嫩嫩12欧美| 国产91精品在线播放| 三级视频在线| 91久久线看在观草草青青| 强伦人妻一区二区三区| 日本中文一区二区三区| 日韩精品久久久| 欧美videos粗暴| 久久在线视频在线| 成人1区2区3区| 亚洲香蕉伊在人在线观| 久久久久久婷婷| 亚洲一区黄色| 热re99久久精品国99热蜜月 | 亚洲最大福利视频网站| 尤物视频在线看| 欧美成va人片在线观看| 日本在线观看视频网站| 久久青草欧美一区二区三区| 欧美精品aaaa| 亚洲激情中文在线| 国产精品日韩一区二区三区| 第一福利在线视频| 亚洲人永久免费| 中文字幕在线播放不卡| 亚洲男人天堂av网| 香蕉视频污视频| 日韩二区在线观看| 国产又粗又爽又黄的视频| 99这里只有精品视频| 欧美综合激情网| 69视频在线| 精品国产成人在线影院| 日批视频免费在线观看| 亚洲丝袜精品丝袜在线| 色哟哟视频在线| 日韩高清不卡一区| 激情图片qvod| 国产99亚洲| 亚洲永久在线观看| 中文字幕成在线观看| 久久久精品美女| 天天舔天天干天天操| 欧美性高清videossexo| 日本天堂中文字幕| 国产三级欧美三级日产三级99 | 欧美黑人经典片免费观看 | 国产精品无码免费专区午夜| 小嫩嫩12欧美| 91久久精品一区二区别| 日本欧美一区| 久久久久久久久久久国产| h网站在线免费观看| 欧美va天堂va视频va在线| 婷婷激情五月网| 亚洲精品免费电影| 日本二区在线观看| 成人av网址在线观看| 91女神在线观看| 亚洲中字黄色| 乱熟女高潮一区二区在线| 国产在视频线精品视频www666| 97在线电影| jizz免费一区二区三区| 国产91精品青草社区| 黄视频网站在线| 国产亚洲精品一区二555| 亚洲精品国产片| 欧美日本在线看| 波多野结衣黄色网址| 婷婷综合久久一区二区三区| 波多野结衣不卡视频| 国产精品久久久久一区| 大又大又粗又硬又爽少妇毛片 | 神马久久久久久久久久久| av在线一区二区| 中文写幕一区二区三区免费观成熟| 日韩电影在线一区二区| 日本少妇高潮喷水视频| 欧美日韩国产探花| 免费观看中文字幕| 99久久影视| 性欧美.com| 欧美精品一区二区三区中文字幕| 国内精品视频免费| av不卡一区| 99久久久精品免费观看国产| 精品国产一区二区三区2021| 国产精品免费福利| 亚洲精品国产嫩草在线观看| 日韩av快播网址| a一区二区三区| 日本电影亚洲天堂| 日本成人三级电影| 欧美在线观看日本一区| 中日韩脚交footjobhd| 青青草成人在线| videos性欧美另类高清| 日本高清视频精品| 电影亚洲精品噜噜在线观看| 国产精品久久电影观看| 久久爱.com| 成人免费自拍视频| 久久综合给合| 国产a一区二区| 精品深夜福利视频| 免费久久久一本精品久久区| 免费黄色成人| 亚洲高清视频在线观看| 欧美丰满日韩| 6080国产精品一区二区| 日韩成人av影院| 成人精品在线视频观看| 性久久久久久久久久久| 91美女片黄在线观看91美女| www.自拍偷拍| 国产喂奶挤奶一区二区三区| 又色又爽的视频| 亚洲精品欧美综合四区| 久久精品国产亚洲av香蕉| 亚洲福利视频三区| 日韩 国产 欧美| 欧美军同video69gay| 亚洲成人一二三区| 亚洲美女www午夜| av福利在线播放| 欧美国产日韩精品| 成人黄色免费短视频| 国产色婷婷国产综合在线理论片a| 99久久这里有精品| 国产精品一区二区三区精品| 精品精品99| 一级特黄妇女高潮| 久久av最新网址| 日本一二三区在线| www.亚洲激情.com| 一本色道久久88| 一区二区三区欧美| 黄色污污网站在线观看| 欧美一区二区三区系列电影| 五月婷婷狠狠干| 中文字幕一区二区精品| 99热99re6国产在线播放| 国产精品视频自在线| www.亚洲一二| 在线国产精品网| 亚洲国产专区| 日本中文字幕二区| 97精品视频在线观看自产线路二| 欧美另类69xxxx| 欧美性极品xxxx做受| 99国产精品久久久久99打野战| 精品无人国产偷自产在线| 操你啦视频在线| 国产97在线观看| 一区中文字幕电影| 亚洲国产欧美日韩| 亚洲欧洲一区| 日韩不卡的av| 久久久精品国产99久久精品芒果| 91嫩草丨国产丨精品| 日韩欧美国产激情| 亚洲精品字幕在线| 日韩亚洲国产中文字幕| 黑人巨大亚洲一区二区久| 97超碰人人看人人| 欧美激情偷拍自拍| 黄色片视频在线播放| 成人爱爱电影网址| 好吊色视频在线观看| 欧美三级中文字幕在线观看| 色视频在线观看免费| 国语对白做受69| 亚洲图色一区二区三区| 大桥未久一区二区| 另类人妖一区二区av| 最近中文字幕在线mv视频在线 | 欧美国产视频| 日本亚洲导航| 丝袜亚洲另类欧美| 菠萝菠萝蜜网站| 性做久久久久久久免费看| 精品人妻一区二区三区蜜桃 | 国产精品中文字幕欧美| 一区二区精品免费| 日韩人在线观看| 香蕉视频成人在线| 国产+人+亚洲| 丁香五月缴情综合网| 五月天激情图片| 国产在线精品一区二区三区不卡| 美国美女黄色片| 欧美中文字幕亚洲一区二区va在线 | 日韩免费一区二区三区| 久久一区二区三区四区五区| 黄色a一级视频| 色88888久久久久久影院野外| 青青青免费视频在线2| 茄子视频成人在线| 国产成人三级| 亚洲第一狼人区| 亚洲欧洲日韩在线| 国产视频在线观看视频| 久久天天躁狠狠躁老女人| 国产中文欧美日韩在线| 法国空姐在线观看免费| 国产成人在线视频网址| 国产小视频在线看| 亚洲精品国产免费| 国产日韩电影| 亚洲精品tv久久久久久久久| 老司机免费视频一区二区三区| 美女福利视频网| 日韩一区二区三区在线视频| 激情影院在线| 久久国产欧美精品| 奇米在线7777在线精品| 天海翼在线视频| 精品少妇一区二区三区日产乱码 | 日韩免费一区二区三区在线播放| 日本在线观看高清完整版| 久久国产一区二区| 蜜臀av一区二区| 黄页网站免费观看| 亚洲精品国产suv| 国产69精品久久久久9999人| 欧美h视频在线观看| 成人毛片老司机大片| 无码人妻丰满熟妇精品| 免费91麻豆精品国产自产在线观看| 成人h动漫免费观看网站| 日av中文字幕| 亚洲蜜臀av乱码久久精品| 人妻一区二区三区四区| 国产精品盗摄久久久| 欧美精选在线| 受虐m奴xxx在线观看| 欧美丰满高潮xxxx喷水动漫| 波多野结衣视频一区二区| 亚洲7777| 国产成人精品三级麻豆| 一本一道无码中文字幕精品热| 久久精品夜夜夜夜夜久久| 日本福利一区| 看看黄色一级片| 一本在线高清不卡dvd| 操你啦在线视频| 色999五月色| 成人激情小说乱人伦| 中国女人真人一级毛片| 国内精品久久久久影院优| 日韩国产综合| 亚洲天堂成人av| 日韩午夜av一区| yiren22亚洲综合| 国产a级片网站|