EonerCMS——做一个仿桌面系统的CMS(十-附最新源码)
废话不多说,继上次遗留的问题——内存泄漏。
趁周末,查了好多资料,也问了好多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
源码:点击下载
新博客地址
hooray.github.io
hooray.github.io
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架