惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - Liu Jian

C#的栈(Stack)和堆(Heap) A low-level Look at the ASP.NET Architecture(引自:http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp 从底层了解ASP.NET架构(引自:http://tech.it168.com/msoft/2007-12-24/200712241034626.shtml) [Joe 原创]Web Control 开发系列(四) Validation机制 [转贴]使用ADO.NET2.0提升数据交互性能(http://dotnet.chinaitlab.com/ADONET/739268.html) - Liu Jian - 博客园 Define a Custom Control Builder for a Custom Server Control(http://www.aspnetpro.com/newsletterarticle/2006/05/asp200605de_l/asp200605de_l.asp) [Joe 原创]Web Control 开发系列(三) 解析IPostBackEventHandler和WebForm的事件机制 [Joe 原创] Web Control 开发系列(二) 深入解析Page的PostBack过程和IPostBackDataHandler [Joe 原创]Web Control 开发系列(一) 页面的生命周期 Web Control 开发系列 之 前言 关于ResolveClientUrl和ResolveUrl的使用 问题 (http://www.cnblogs.com/borllor/archive/2008/02/25/1081037.html) ASP.NET MVC 学习: 视图(http://whx.tzgt.gov.cn/newOperate/html/1/12/123/12058.html) ASP.NET MVC框架(第一部分)(http://blog.joycode.com/scottgu/archive/2007/11/14/111385.aspx) (转贴的)如何开发Firefox插件 Cross Domain XmlHttpRequests (http://benreichelt.net/blog/2005/4/11/Cross-Domain-XmlHttpRequests-Ajax/) Cross Domain XmlHttpRequests (http://benreichelt.net/blog/2005/4/11/Cross-Domain-XmlHttpRequests-Ajax/) 跨域(cross-domain)访问 cookie (读取和设置)(http://www.dup2.org/node/384) ajax跨域和js跨域解决方案(http://hi.baidu.com/longniao/blog/item/ce5e9cca3e2a4782c817684d.html) JavaScript内存泄漏(http://www.blogjava.net/tim-wu/archive/2006/05/29/48729.html)
Javascript 内存泄漏问题(http://hi.baidu.com/webworker/blog/item/25f9f0dcf14d51a2cc116671.html)
Liu Jian · 2008-05-30 · via 博客园 - Liu Jian

内存泄漏,就是内存不能够被正确地配置,内存不能及时有效回收,他会导致程序执行效率降低甚至执行失败。

在浏览器领域,大部分都可能会出现内存泄漏问题,但是以IE最为多见,也最为严重,尤其是页面中有许多Javascript的交互效果的时候。其中涉及到循环结构(cyclic structure)DOM对象属性、JavaScript对象属性以及垃圾回收器garbage collector

循环结构(cyclic structure),是指一个DOM对象包含JavaScript对象参数(事件处理函数),JavaScript对象又包含了DOM对象的属性参数。(比如给某个超链接A添加一个onclick事件函数,这时候A就有了相应的事件处理函数,而JavaScript函数对象中也有了A的onclick属性)。

当循环结构(cyclic structure)形成时如果没有别的参数传递给DOM对象或者Javascript函数对象,JavaScript的垃圾回收器(一个自动内存管理器)就会把这两个对象的内存释放并重新进行配置,但是IE的DOM对象属性参数并不能由JavaScript管理清除(不能清除DOM对象的属性参数),而他自己的内存管理机制并不能理解循环结构(cyclic structure)的垃圾回收机制。因此,当循环结构(cyclic structure)的垃圾回收条件形成时,IE也不能进行正确的内存回收管理,导致内存泄漏。当然,这只有在循环结构的未回收内存的数量达到很大的数量级的时候,才会出现明显的内存泄漏症状。

此外,由于循环结构在闭包中出现的几率较大,内存泄漏问题也是不可忽视的。

解决的办法有:

一、避免让可能被移除或改变的DOM对象(remove node/reset innerHTML)中出现循环结构(cyclic structure);二、在DOM对象被移除前(remove node/reset innerHTML)清空他的属性参数(domNode.Jsfunction = null)1.避免扩展DOM对象的属性参数,如果有要在适当的时候清空;
2.如果某个事件处理函数在移除后可能被某些DOM对象调用,一定要清空;
3.Ajax中XMLHttpRequest的onreadystatechange事件函数调用之后要清。
4....

以上纯属个人理解,大家自行辨解,同时还望各位高手不吝赐教。
一个可以清除某个DOM对象及其子孙对象的事件属性的函数
function purge(d) {
    var a = d.attributes;//取得DOM对象的所有事件属性
    if (a) {
        var l = a.length;
        for ( var i = 0; i < l; i += 1) {
            var n = a[i].name;//取得DOM对象事件属性的名称如onclick、onblur等
            if (typeof d[n] === 'function') {
                d[n] = null;//清空DOM对象事件属性的值
            }
        }
    }
    a = d.childNodes;//处理子元素
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(d.childNodes[i]);
        }
}
}

Douglas Crockford: JScript Memory Leaks
http://www.crockford.com/javascript/memory/leak.html

Justin Rogers: Understanding and Solving Internet Explorer Leak Patterns
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/ie_leak_patterns.asp