Javascript閉包引起IE內(nèi)存泄露分析_第1頁
Javascript閉包引起IE內(nèi)存泄露分析_第2頁
Javascript閉包引起IE內(nèi)存泄露分析_第3頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Javascript 閉包引起 IE 內(nèi)存泄露分析Javascript 閉包引起 IE 內(nèi)存泄露分析Javascript 閉包引起 IE 內(nèi)存泄露分析復制代碼代碼如下:functionfors() obj_a=obj_b;obj_b. attr=obj_a;復制代碼代碼如下:functionfors() obj_b= ;obj_b. attr=obj_b;上面是兩個個很顯示的循環(huán)引用, IE 中產(chǎn)生了內(nèi)存泄露,由于IE 的內(nèi)存回收機制,導至會長期占用內(nèi)存而不能釋放。但閉包的內(nèi)存泄露,有些隱蔽。因為閉包的 ' 循環(huán)引用,是間接的復制代碼代碼如下:div zz);functioniemem

2、ery()var js_obj=document. createElement (js_obj. oncontextmenu=function()returnfalse;從外表上看,沒有任何循環(huán)引用。但上面是一個閉包,根據(jù)閉包 的 特性,內(nèi)部函數(shù)有權(quán)訪問外部函數(shù)的變量對象。所以當 iememery 執(zhí) 行之后:js_obj是一個DOM元素的引用,DOM元素它長期在網(wǎng)頁當中,不 會 消失,而這個DOM元素的一屬性oncontextmenu,又是內(nèi)部的函 數(shù)引用閉 包,而這個匿名函數(shù)又和 js_obj 之間有隱藏的關(guān)聯(lián) 作用域鏈所以形成了一個,循環(huán)引用 . 即:js_obj. oncontextm

3、enu 間接引用到 js_obj 也就是說,這個對象 的 一個屬性,又間接的引用了自己。只要有循環(huán)引用,就會在 IE 下產(chǎn)生內(nèi)存泄露。翻開你的 windows 任 務管理器,在 IE 中不停刷新含有這個代碼的 html 頁面,看看 Iexploer 進程的內(nèi)存占用情況,一直上升,且不會自動回收降 低;解決方法:復制代碼代碼如下:fun cti oni ememery var js_obj=document. createElement,zdiv ,z;js_obj. oncontextmenu 二 function returnfalse; ;js_obj.one ontextme nu=null;/加上這句,斷開引用當IE中發(fā)生js對象與dom對象直接的循環(huán)引用,并且之后沒有引用指向他們,如果是 IE6, 內(nèi)存泄漏,直到關(guān)閉 IE 進程為止如果是 IE7, 內(nèi)存泄漏,直到離開當前頁面為止如果是 IE8, GC 回收器回收他們的內(nèi)存,無論當前是不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論