1. 致命的string
javascrip的string,类似.net 的string,大string操作费CPU,费内存.
替换方法:Array,但首先应该避免大string的各种操作.
2.unwise的DOM
重复的innerhtml操作&createElement操作对内存的消耗巨大.
innerHTML操作如果处理不当,很容易形成memory leak.
替换方法:
1.不要使用innerhtml.
2. 在RemoveElement前,从下往上一层层Remove掉ElementElement上面的事件.
3. 不要使用RemoveElement方法,而是先在页面上建一个垃圾箱(div),然后将element先添加到垃圾箱,再执行垃圾箱.innerHTML="";
4. 确保Dom结构的完整.
3.变量
过多的外部变量会导致内存泄露成为必然.
替换方法:
1.将外部变量包装成一个大对象,并在必要的时候先调用其dispose方法,并设置大对象为null,方便GC及时清除内存.
2.定义局部变量时,别忘记了var ,并在作用域结束前,显式的设置该变量,及引用该变量的对象为null,方便GC及时清除内存.
3. delete根本不是那回事,别用了.
4. 复杂的调用引用逻辑
复杂的调用逻辑,无疑会增加对象引用的复杂度,使对象的清理困难重重,引发内存crash.
替换方法:需要一个良好的设计
5. 浏览器比较
在内存管理上从优到差:
IE, 内存使用率高,
当变量失效时,后申请的内存会覆盖原失效变量所使用的内存
支持手动gc(CollectGarbage())
Debug 内存泄露的工具Drip,sIEve
firefox, 内存使用率中低
使函数内的变量,在作用域失效后,仍会占用内存,如需要内存时,不会自动覆盖原内存
在内存接近约120M时自动gc
safari, 内存使用率极低,刷新也不会清理内存