EonerCMS——做一个仿桌面系统的CMS(十-附最新源码)
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 237
废话不多说,继上次遗留的问题&mdash&mdash内存泄漏。趁周末,查了好多资料,也问了好多JS高手,大致是这么个情况。因为我每打开一个窗口,就绑定了一个永久性的dom元素,而dom元素的回收是靠

  废话不多说,继上次遗留的问题——内存泄漏

  趁周末,查了好多资料,也问了好多JS高手,大致是这么个情况。因为我每打开一个窗口,就绑定了一个永久性的dom元素,而dom元素的回收是靠计数器,计数器是会累加的,如果没有清零,即便删掉了节点,其实还是驻留在内存中。

  既然大致明白了原理,处理起来就相对比较简单了,就一句话,首先先看下原先的关闭窗口的代码

 //关闭   $('.task-window li[window="'+obj.attr('window')+'"]').remove();   obj.fadeOut("500",function(){$(this).remove();});  

  修改后

 //关闭   $('.task-window li[window="'+obj.attr('window')+'"]').remove();   obj.fadeOut("500",function(){$(this).html("").remove();});  

  我们看到,其实我就是先清空了html代码,然后再删除了节点。

  然后这次我还更新了事件绑定,因为窗口的创建、关闭、移动等事件,其实都是一样的,所以事件绑定我单独拎了出来,而非创建dom元素的时候进行绑定,这样只需注册一次,而且这样也能减少内存的占用吧,这个我没研究过,希望有人能帮我解答下,事件越多是不是内存也会占用越多?

  这次就更新了这些,写的比较少,因为代码修改没花太多时间,大部分都在学习和思考上,因为自己本身对js的生命周期、内存释放/泄漏不太了解,所以就花了点时间去了解,写的不对的地方,还希望大家指出。

  测试地址:http://saw.caifutang.com/eonercms

  源码:点击下载

  PS:IE下测试内存占用的小工具sIEve,如何使用可以看下这个链接,感觉还挺好用的。

如果你读了我的文章,觉得有帮助,你可以选择:

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2