【问题标题】:Is $.empty() enough for big ajaxy apps?$.empty() 对于大型 ajaxy 应用程序是否足够?
【发布时间】:2012-01-23 23:23:09
【问题描述】:

一直在开发一个应用程序,由于它变得有点太大,我一直在考虑改进内存管理的方法,因为该应用程序主要在 Javascipt 上运行。因此,每次单击导航项时,我都会将 jquery 称为空,然后通过 ajax 显示 html。例如:

//$.ajaxSetup(); called before this
//$this is the attached element 
$.ajax({success:function(data){
    $this.empty().html(data.output).fadeIn(400);
    //more javascript stuff like loading tinymce or jquery ui
}});

这足以防止内存泄漏吗?我不完全确定 empty 是做什么的,但我假设它会删除该 div 中的所有 DOM 元素以及任何其他对象和事件?顺便提一句。你可以在这里找到应用程序http://webproposalgenerator.com/http://webproposalgenerator.com/demo

任何关于提高性能/安全性的提示或任何反馈都将不胜感激。

【问题讨论】:

  • 你有内存泄漏还是这只是一个学术讨论?您可以在现代浏览器中使用开发人员工具来检查内存泄漏。如果您不确定.empty() 做了什么,那么这里是documentation。它删除子元素及其数据和事件处理程序以及元素本身。
  • 哪些浏览器正在/正在显示看起来像内存泄漏的行为?
  • 目前还没有任何内存泄漏,我只是想计划一下,因为我正在重做大部分核心框架。我知道在 PHP 中,unset() 是尝试清除内存块时要走的路,是否有 javascipt/jquery 等价物?

标签: javascript jquery performance memory


【解决方案1】:

$.fn.empty 应该足够了,它会删除与元素关联的所有数据和事件,然后删除元素。它还在这些元素上定义的所有基于 jquery-ui widget.js 的小部件上调用 .widget("destroy")

还需要注意的是,jquery 的 $.fn.html 方法在附加 html 之前在给定元素上调用 $.fn.empty(),因此,如果您使用 $.fn.html,则不必调用 $.fn.empty

【讨论】:

    【解决方案2】:

    实际上我的猜测是 .html 暗示 .empty 无论如何,我也不确定这是真的。对于性能部分:根据jqfundamentals excelent book,推荐的最佳实践是在元素位于 DOM 中的.detach() 时添加内容。试图锁定代码以获取建议,但没有找到。顺便说一句,不错的网站

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 2014-07-28
      • 2015-10-17
      • 1970-01-01
      • 2015-06-03
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多