首页
Javascript
Html
Css
Node.js
Electron
移动开发
小程序
工具类
服务端
浏览器相关
前端收藏
其他
关于
公司注册

jquery使用不当导致内存泄漏

2013年12月10日 发布 阅读(1780) 作者:Jerman

jQuery是现在最流行的js库,一般情况下我们都会放心的使用它,不用考虑其内存泄漏的问题。

最近的项目是基于MVC模式的管理系统,期间要采用ajax不断轮询服务器,以获得最新的数据,这时候使用jQuery的时候就要注意了,一不小心俺们最可爱的IE内存就up up up了~~

1、$.extend()的使用不当,内存泄漏

  1. //浅拷贝
  2. $.extend(object1,object2);
  3. //浅拷贝建议直接使用赋值,上面的写成:
  4. object1 = object2;
  5. //深拷贝导致IE内存泄漏
  6. $.extend(true,object1,object2);
  7. //轮询的时候发现,用上面的方法,会造成泄漏
  8. //改成下面结构泄漏消除
  9. var object1 = $.extend(true,{},object1,object2);

2、html()内存泄漏

  1. //轮询的时候,每隔5秒调用一次html,导致DOM泄漏,内存增加
  2. $(element).html("hello");
  3. //html用innerHTML代替,泄漏消除
  4. $(element)[0].innerHTML = "hello";

这里要简单理解下jQuery html()和innerHTML的区别,innerHTML是原生方法,写入字符串没有问题,所有浏览器都支持。但是如果写入<script>代码,innerHTML在firefox、chrome等浏览器不能执行写入的脚本代码。

但是jQuery html()支持写入<script>标签,并能执行写入的脚本。

3、重复绑定导致内存泄漏

//jQuery中绑定的一般方法,如果是轮询绑定,绑定前一定要先解除绑定

  1. jQuery.on()
  2. jQuery.bind()
  3. jQuery.live()
  4. jQuery.delegate()
  5. //解除绑定的方法
  6. jQuery.off()
  7. jQuery.unbind()
  8. jQuery.undelegate()

4、empty()使用不当,内存泄漏

本想用empty()来清空某个element,但使用后,导致内存泄漏,原因还真不详,也许该去分析下jQuery的源代码了。

版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处
  • jQuery对象中类数组的概念及操作

    什么是类数组?相信我们对function方法的arguments很熟悉,arguments就像一个数组,但instanceof Array检测会返回false,可以称为“类数组”。

    发布:2014-04-10 阅读(1522)

  • jquery使用不当导致内存泄漏

    jQuery是现在最流行的js库,一般情况下我们都会放心的使用它,不用考虑其内存泄漏的问题。 最近的项目是基于MVC模式的管理系统,期间要采用ajax不断轮询服务器,以获得最新的数据,这时候使用jQuery的时候就要注意了,一不小心俺们最可爱的IE内存就up up up了~~

    发布:2013-12-10 阅读(1780)

  • jQuery.support源码分析(检测浏览器兼容)

    jquery.support主要是检测浏览器兼容性,支持力度的方法,用于展示不同浏览器各自特性和bug的属性集合。作为一个静态成员,提供给jquery内部函数,告诉他们某些功能是否能用。避免了以往通过检测浏览器版本做修改。

    发布:2013-05-08 阅读(1418)

  • jQuery跳出each循环(替换break,continue)

    jQuery each循环中,如果要实现类似break或continue的功能,不用跟原生javascript for循环一样用break或continue了,而必须用reaturn false、return true

    发布:2012-11-14 阅读(1703)