JavaScript避免内存泄露及内存管理技巧
JavaScript内存 管理 技巧 避免 泄露
2023-06-13 09:15:45 时间
本文实例讲述了JavaScript避免内存泄露及内存管理技巧,非常实用。分享给大家供大家参考之用。具体方法如下:
本文内容源自谷歌WebPerf(伦敦WebPerf集团),2014年8月26日。
一般来说,高效的JavaScriptWeb应用必须流畅,快速。与用户交互的任何应用程序,都需要考虑如何确保内存有效使用,因为如果消耗过多,页面就会崩溃,迫使用户重新加载。而你只能躲在角落哭泣。
自动垃圾收集是不能代替有效的内存管理的,特别是在大型,长时间运行的Web应用程序中。本文中,我们将演示如何通过Chrome的DevTools对内存进行有效的管理。
并了解如何解决性能问题,如内存泄漏,频繁的垃圾收集暂停,和整体内存膨胀,那些真正让你耗费精力的东西。
AddyOsmani在他的PPT中展示了很多会在ChromeV8中产生内存泄漏的示例:
1)Delete一个Object的属性会让此对象变慢(多耗费15倍的内存)
varo={x:"y"}; deleteo.x;//此时o会成一个慢对象 o.x;// varo={x:"y"}; o=null;//应该这样
2)闭包
在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。
vara=function(){ varlargeStr=newArray(1000000).join("x"); returnfunction(){ returnlargeStr; } }();
3)DOM泄露
当原有的COM被移除时,子结点引用没有被移除则无法回收。
varselect=document.querySelector; vartreeRef=select("#tree"); //在COM树中leafRef是treeFre的一个子结点 varleafRef=select("#leaf"); varbody=select("body"); body.removeChild(treeRef); //#tree不能被回收入,因为treeRef还在 //解决方法: treeRef=null; //tree还不能被回收,因为叶子结果leafRef还在 leafRef=null; //现在#tree可以被释放了。
4)Timers计(定)时器泄露
定时器也是常见产生内存泄露的地方:
for(vari=0;i<90000;i++){ varbuggyObject={ callAgain:function(){ varref=this; varval=setTimeout(function(){ ref.callAgain(); },90000); } } buggyObject.callAgain(); //虽然你想回收但是timer还在 buggyObject=null; }
5)调试内存
Chrome自带的内存调试工具可以很方便地查看内存使用情况和内存泄露:
希望本文所述对大家javascript程序设计的学习有所帮助。
相关文章
- JavaScript 设计模式之组合模式
- 【说站】javascript内存泄漏的识别方法
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- javascript中对象自变量的理解详解编程语言
- 权威JavaScript中的内存泄露模式
- Javascript常用运算符(Operators)-javascript基础教程
- javascript下function声明一些小结
- 细品javascript寻址,闭包,对象模型和相关问题
- JavaScript验证浏览器是否支持javascript的方法小结
- Javascript阻止javascript事件冒泡,获取控件ID值
- JavaScript数组应用可依次读取的公告栏文字
- JavaScript对象、属性、事件手册集合方便查询
- javascript实现上传图片并预览的效果实现代码
- javascript错误的认识不用关心内存管理
- JavaScript盒模型尺寸深入理解
- javascript仿php的print_r函数输出json数据
- JavaScript对内存分配及管理机制详细解析
- javascript垃圾收集机制与内存泄漏详细解析
- 利用noesis.Javascript开源组件.Net中执行javascript脚本
- javascript:FF/Chrome与IE动态加载元素的区别说明
- javascript实现复制与粘贴操作实例
- JavaScript实现的内存数据库LokiJS介绍和入门实例
- JavaScript中伪协议javascript:使用探讨
- JavaScript的内存释放问题详解
- Eclipse配置Javascript开发环境图文教程