日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS造成內存泄漏的幾種情況實例分析

瀏覽:204日期:2024-05-23 09:25:24

本文實例講述了JS造成內存泄漏的幾種情況。分享給大家供大家參考,具體如下:

介紹:

js中的內存垃圾回收機制:垃圾回收器會定期掃描內存,當某個內存中的值被引用為零時就會將其回收。當前變量已經使用完畢但依然被引用,導致垃圾回收器無法回收這就造成了內存泄漏。傳統頁面每次跳轉都會釋放內存,所以并不是特別明顯。

Vue單頁面應用中:Web App 與 傳統Web的區別,因為Web App是單頁面應用頁面通過路由跳轉不會刷新頁面,導致內存泄漏不斷堆積,導致頁面卡頓。

泄漏點:

1.DOM/BOM 對象泄漏2.script 中存在對DOM/BOM 對象的引用導致3.Javascript 對象泄漏4.通常由閉包導致,比如事件處理回調,導致DOM對象和腳本中對象雙向引用,這個時常見的泄漏原因

代碼關注點:

1.DOM中的addEventLisner 函數及派生的事件監聽, 比如Jquery 中的on 函數, vue 組件實例的 $on 函數,第三方庫中的初始化函數2.其它BOM對象的事件監聽, 比如websocket 實例的on 函數3.避免不必要的函數引用4.如果使用render 函數,避免在html標簽中綁定DOM/BOM 事件

Vue如何處理:

1.如果在mounted/created 鉤子中綁定了DOM/BOM 對象中的事件,需要在beforeDestroy 中做對應解綁處理2.如果在mounted/created 鉤子中使用了第三方庫初始化,需要在beforeDestroy 中做對應銷毀處理3.如果組件中使用了定時器,需要在beforeDestroy 中做對應銷毀處理4.模板中不要使用表達式來綁定到特定的處理函數,這個邏輯應該放在處理函數中?5.如果在mounted/created 鉤子中使用了$on,需要在beforeDestroy 中做對應解綁($off)處理6.某些組件在模板中使用 事件綁定可能會出現泄漏,使用$on 替換模板中的綁定

Vue官網講解避免內存泄露https://cn.vuejs.org/v2/cookbook/avoiding-memory-leaks.html

另外,vue 在IE edge瀏覽器下,父子組件的場景,子組件依賴父組件的狀態,子組件控制父組件狀態變化從而反饋給子組件的展示變化,子組件通過v-if模式存在于視圖中,父組件通過狀態控制子組件的v-if狀態變換。子組件控制父組件狀態完成子組件數據填充后,父組件切換子組件的v-if狀態,子組件占用dom結構被清理。此時,子組件存在時的內存占用未被釋放,當父組件再次回切v-if狀態時,子組件重新展示,內存飆升,重復幾次切換后,內存飆升明顯,頁面卡頓。

js通常內存泄漏的幾種情況的介紹

1.閉包

function fn1(){ var n=1;}//我想取到里面的局部變量nfunction fn1(){ var n=1; function fn2(){//在加一個fn2當他的子集 alert(n); } }

但是我在外面還是訪問不到那就return出來

function fn1(){ var n=1; function fn2(){//在加一個fn2當他的子集 alert(n); }return fn2(); //return出來后 他就給 window了所以一直存在內存中。因為一直在內存中,在IE里容易造成內存泄漏}fn1();

盡量書寫的時候,避免這種情況。

2.意外的全局變量

一個未聲明變量的引用會在全局對象中創建一個新的變量。在瀏覽器的環境下,全局對象就是 window,也就是說:

function foo(arg) { bar = 'aaaaa';} 實際上等價于function foo(arg) { window.bar = 'aaaaa';}

function foo() { this.variable = 'qqqqq';}//this 指向全局對象(window)foo();

為了防止這種錯誤的發生,可以在你的 JavaScript 文件開頭添加 ’use strict’; 語句

3.定時器setTimeout setInterval

當不需要setInterval或者setTimeout時,定時器沒有被clear,定時器的回調函數以及內部依賴的變量都不能被回收,造成內存泄漏。比如:vue使用了定時器,需要在beforeDestroy 中做對應銷毀處理。js也是一樣的。

clearTimeout(***)clearInterval(***)

4.如果在mounted/created 鉤子中使用了$on,需要在beforeDestroy 中做對應解綁($off)處理

beforeDestroy() { this.bus.$off(’****’);}

5、給DOM對象添加的屬性是一個對象的引用

var testObject = {}; document.getElementById(’idname’).property = testObject; //如果DOM不被消除,則testObject會一直存在,造成內存泄漏

解決方法:

在window.onunload事件中寫上:

window.onunload=function(){ document.getElementById(’idname’).property = null; //釋放內存};

6.DOM對象與JS對象相互引用

function testObject(element) { this.elementReference = element; // 為testObject(js)對象的屬性綁定element(DOM)對象element.property = this; // 為element(DOM)對象的屬性綁定testObject(js)對象} new testObject(document.getElementById(’idname’));

解決方法:

在window.onunload事件中寫上:

document.getElementById(’idname’).property = null;

7.從外到內執行appendChild。這時即使調用removeChild也無法釋放

var parentDiv = document.createElement('div'); var childDiv = document.createElement('div'); document.body.appendChild(parentDiv); parentDiv.appendChild(childDiv);

解決方法: 從內到外執行appendChild:

var parentDiv = document.createElement('div'); var childDiv = document.createElement('div'); parentDiv.appendChild(childDiv); document.body.appendChild(parentDiv);

8.反復重寫同一個屬性會造成內存大量占用(但關閉IE后內存會被釋放)

for(i = 0; i < 5000; i++) { hostElement.text = 'asdfasdfasdf'; }

這種方式相當于定義了5000個屬性!

9.注意程序邏輯,避免“死循環”之類的

10.echarts配合循環計時器等出現的內存泄漏

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript操作DOM技巧總結》、《JavaScript頁面元素操作技巧總結》、《JavaScript事件相關操作與技巧大全》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript錯誤與調試技巧總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精选在线| 91精品国产自产在线观看永久∴| 成人羞羞在线观看网站| 国产一区二区三区91| 麻豆91精品视频| 精品三级国产| 久久久久久色| 国产精品久久久久久久久久久久久久久 | 国产欧美日韩在线一区二区| 国产精品三p一区二区| 久久久精品区| 免费福利视频一区二区三区| 136国产福利精品导航网址| 亚洲大全视频| 亚洲一级大片| 国产九一精品| 国产成年精品| 日韩精品91| 女人av一区| 亚洲最大av| 国产精品久久久久久模特| 都市激情国产精品| 在线成人直播| 奇米狠狠一区二区三区| 美女视频免费精品| 亚洲高清av| 亚洲va久久久噜噜噜久久| 欧美国产精品| 久久精品123| 日日摸夜夜添夜夜添国产精品| 欧美激情在线精品一区二区三区| 亚洲成人av观看| 在线亚洲激情| 欧美有码在线| 国产粉嫩在线观看| 三级一区在线视频先锋| 国产美女精品视频免费播放软件| 亚洲风情在线资源| 久久高清一区| 麻豆成人综合网| 亚洲黑丝一区二区| 18国产精品| 日韩在线欧美| 日韩一区精品| 亲子伦视频一区二区三区| 亚洲视频国产| 精品视频免费| 黑丝一区二区三区| 国产精品亚洲欧美日韩一区在线| 久久久成人网| 国产欧美激情| 1024精品一区二区三区| 日本午夜精品| 99久久激情| 日本va欧美va瓶| 蜜臀久久精品| 91精品丝袜国产高跟在线| 日韩精品中文字幕第1页| 日韩在线a电影| 国产成人久久精品一区二区三区| 午夜在线精品偷拍| 日韩a一区二区| 欧美日韩国产一区精品一区| 国产乱子精品一区二区在线观看| 免费成人网www| 国产欧美一区二区三区米奇| 亚洲性色视频| 成人在线超碰| 日本久久一区| 在线一区免费| 日韩不卡一区| 91精品国产自产观看在线| 国产一在线精品一区在线观看| 亚洲午夜天堂| 国产精品网站在线看| 老司机久久99久久精品播放免费| 日韩av专区| 日韩在线观看中文字幕| 久久视频精品| 国产videos久久| 日韩福利视频一区| 亚洲欧美成人综合| 99精品视频在线| 精品视频国内| 欧美一级二级三级视频| 天堂va蜜桃一区二区三区| 成人羞羞视频播放网站| 麻豆国产欧美一区二区三区| 亚洲制服欧美另类| 尹人成人综合网| 日韩网站中文字幕| 精品一二三区| 日本欧美一区| 影音先锋久久精品| 影院欧美亚洲| 久久亚洲精品中文字幕蜜潮电影| 精品女同一区二区三区在线观看| 日韩不卡一区二区三区 | 肉色欧美久久久久久久免费看| 国产精品啊啊啊| 日本午夜精品久久久久| 丝袜a∨在线一区二区三区不卡| 99久久夜色精品国产亚洲1000部| 日韩av在线播放网址| 麻豆久久一区| 欧美久久久网站| 亚洲综合色婷婷在线观看| 好看不卡的中文字幕| 中文字幕系列一区| 黄毛片在线观看| 国产在线观看www| 国产aⅴ精品一区二区四区| 久久福利在线| 国产精品一区二区美女视频免费看| 中文字幕一区二区三区在线视频| 亚洲一区二区免费看| 国产视频一区免费看| 97精品国产一区二区三区| 国产精品porn| 欧美伊人影院| 国产乱码精品一区二区三区亚洲人| 亚洲男女自偷自拍| 日韩中文字幕亚洲一区二区va在线| 怡红院精品视频在线观看极品| 在线综合欧美| 视频一区视频二区中文| 蜜臀精品一区二区三区在线观看| 蜜桃av一区二区| 亚洲人亚洲人色久| 日本不卡视频在线| 欧美在线看片| 国产精品久久久久久久久久妞妞| 国产精品久久乐| 久久av免费| 美女av一区| 日韩大片在线观看| 欧美一区久久久| 欧美成人综合| 免费高清在线一区| 日韩二区三区四区| 国产日韩一区二区三区在线播放| 国产精品久久久久久模特 | 日韩av一级片| 国产精品红桃| 国产传媒在线观看| 五月综合激情| 亚洲免费资源| 美女久久久久久| 亚洲电影有码| 日韩一区精品视频| 日韩精品免费观看视频| 国产精品亚洲一区二区在线观看 | 成人羞羞视频播放网站| 一区在线免费| 日韩精品一区二区三区免费视频| 欧美经典一区| 久久国产欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 午夜精品影院| 日韩激情av在线| 国产一区二区三区亚洲| 激情欧美丁香| 伊人久久亚洲| 精品久久网站| 精品欧美久久| 清纯唯美亚洲综合一区| 国产aⅴ精品一区二区四区| 91九色精品| 日韩av影院| 久久久久久网| 爽好多水快深点欧美视频| 国产欧美日韩精品一区二区三区| 日韩在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 麻豆91在线播放| 伊人成人在线视频| 久久av免费| 国产综合精品| 日韩av黄色在线| 日韩精品一卡| 91成人在线网站| 久久中文亚洲字幕| 国产探花一区| 亚洲国内精品| 欧美啪啪一区| 影视先锋久久| 国产精选久久| 亚洲国产日韩欧美在线| 国产精品v一区二区三区| 免费毛片在线不卡| 久久a爱视频| 亚洲主播在线| 精品国产乱码久久久| 国产精品免费看| 国产一区二区三区精品在线观看 | 国产精品主播在线观看| 午夜国产欧美理论在线播放| 国产精品一国产精品k频道56| 久久精品影视| 美女国产精品久久久|