jQuery是现在最流行的js库,一般情况下我们都会放心的使用它,不用考虑其内存泄漏的问题。
最近的项目是基于MVC模式的管理系统,期间要采用ajax不断轮询服务器,以获得最新的数据,这时候使用jQuery的时候就要注意了,一不小心俺们最可爱的IE内存就up up up了~~
1、$.extend()的使用不当,内存泄漏
//浅拷贝
$.extend(object1,object2);
//浅拷贝建议直接使用赋值,上面的写成:
object1 = object2;
//深拷贝导致IE内存泄漏
$.extend(true,object1,object2);
//轮询的时候发现,用上面的方法,会造成泄漏
//改成下面结构泄漏消除
var object1 = $.extend(true,{},object1,object2);
2、html()内存泄漏
//轮询的时候,每隔5秒调用一次html,导致DOM泄漏,内存增加
$(element).html("hello");
//html用innerHTML代替,泄漏消除
$(element)[0].innerHTML = "hello";
这里要简单理解下jQuery html()和innerHTML的区别,innerHTML是原生方法,写入字符串没有问题,所有浏览器都支持。但是如果写入<script>
代码,innerHTML在firefox、chrome等浏览器不能执行写入的脚本代码。
但是jQuery html()支持写入<script>
标签,并能执行写入的脚本。
3、重复绑定导致内存泄漏
//jQuery中绑定的一般方法,如果是轮询绑定,绑定前一定要先解除绑定
jQuery.on()
jQuery.bind()
jQuery.live()
jQuery.delegate()
//解除绑定的方法
jQuery.off()
jQuery.unbind()
jQuery.undelegate()
4、empty()使用不当,内存泄漏
本想用empty()来清空某个element,但使用后,导致内存泄漏,原因还真不详,也许该去分析下jQuery的源代码了。
什么是类数组?相信我们对function方法的arguments很熟悉,arguments就像一个数组,但instanceof Array检测会返回false,可以称为“类数组”。
jQuery是现在最流行的js库,一般情况下我们都会放心的使用它,不用考虑其内存泄漏的问题。 最近的项目是基于MVC模式的管理系统,期间要采用ajax不断轮询服务器,以获得最新的数据,这时候使用jQuery的时候就要注意了,一不小心俺们最可爱的IE内存就up up up了~~
jquery.support主要是检测浏览器兼容性,支持力度的方法,用于展示不同浏览器各自特性和bug的属性集合。作为一个静态成员,提供给jquery内部函数,告诉他们某些功能是否能用。避免了以往通过检测浏览器版本做修改。
jQuery each循环中,如果要实现类似break或continue的功能,不用跟原生javascript for循环一样用break或continue了,而必须用reaturn false、return true