小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

防止Javascript造成IE內(nèi)存泄漏的若干原則 - lunaticsun.com - ...

 jimmylin88cn 2008-03-20

本文首發(fā)于:http://www./article/iememoryleak-principals

最近 hax提到了IE Memory Leak ,后來(lái)又看到 有人 把Douglas Crockford的 JScript Memory Leaks 拿出來(lái)討論,不知道是不是最近內(nèi)存泄漏又火了。這玩意兒確實(shí)是偏向技術(shù)了點(diǎn)兒,設(shè)計(jì)人員在使用Javascript如果不了解IE內(nèi)存泄漏的實(shí)質(zhì)是很容易造成泄漏的。

需要推薦的關(guān)于IE內(nèi)存泄漏的唯一大作是: Understanding and Solving Internet Explorer Leak Patterns ,亦有 中文翻譯版本 。

如果想要讀懂以上文章從而深入了解IE內(nèi)存泄漏的原理,那么你首先要了解Javascript的以下方面:

  • scope chain
  • closure
  • reference type

恕我沒(méi)有辦法提供以上三項(xiàng)的教程,互聯(lián)網(wǎng)上隨意搜索一下都有很多。對(duì)于一個(gè)偏向設(shè)計(jì)的人員來(lái)說(shuō),我覺(jué)得深入了解IE內(nèi)存泄漏沒(méi)有很大必要,但是如果是開(kāi)發(fā)人員就一定要掌握,設(shè)計(jì)人員可以嘗試在使用Javascript中遵循以下若干原則:

  • 不要將一個(gè)DOM對(duì)象和一個(gè)JS對(duì)象相互成為對(duì)方的屬性
  • 將事件處理函數(shù)放在定義它的函數(shù)的外部
  • 不要在創(chuàng)建DOM對(duì)象時(shí)插入script
  • 總是先將新創(chuàng)建的DOM對(duì)象插入到文檔后,在對(duì)其進(jìn)行其他操作。

另外,關(guān)于Douglas Crockford的例子造成了嚴(yán)重內(nèi)存泄漏的原因不僅僅在于他違反了以上第二條,將 s 的事件處理函數(shù)放在了定義 s.onclick 的函數(shù)之內(nèi),形成了閉包。

s.onclick = function (e) {           s.style.backgroundColor = 'red';           alert(n);   };

更重要的是,他在其后的代碼中使用了

s.parentNode.removeChild(s);

這句也是造成嚴(yán)重泄漏的關(guān)鍵之一。它與DOM Insertion Order Leak Model的原理一致,并且加劇了閉包造成的內(nèi)存泄漏。

最后,我想說(shuō)的是IE8 beta1沒(méi)有完全解決內(nèi)存泄漏問(wèn)題,它解決了若干原則中違反第三條后造成的泄漏,但根據(jù)我的測(cè)試其他幾項(xiàng)并沒(méi)有解決。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多