jQuery:在应用程序运行时期间保持对jQuery对象的引用

时间:2011-10-12 14:28:11

标签: jquery

我有一个关于处理对jQuery对象的引用的问题。

假设在我的应用程序中我有一个ID = some_widget的DOM元素DIV,它应该在所有应用程序运行时期间存在并且在代码中经常使用。

1)因此,如果我在应用程序运行时期间在全局变量中保留对它的引用:

var someWidget = $("#some_widget") 

它会创建一次jquery对象,但会在应用程序运行期间消耗内存,但是当我使用someWidget时它不会再次创建jquery对象,所以这可以加快这个过程。

2)如果我总是在代码中使用$(“#some_widget”)的调用,它将不会不断消耗内存,但每次我都使用$。构建对象需要时间jQuery。

我是对的吗?什么方法更充足? 保持对许多对象的引用最终会导致内存泄漏吗? 它取决于什么,你怎么看?

3 个答案:

答案 0 :(得分:2)

是的,您可以通过在变量中声明它来缓存您的jQuery对象。事实上,这被认为是重复使用对象的最佳实践。

答案 1 :(得分:2)

我的理解(虽然我自己仍然是jQuery新手)是通过缓存jQuery对象来节省来自每次调用选择器时都不遍历DOM的事实。因此,例如,如果在代码中多次调用$("#some_widget"),jQuery将每次遍历DOM以查找具有该ID的元素。如果在变量中缓存一次,则可以像调用选择器一样调用jQuery方法,但不需要DOM遍历。我已在我的代码中完成了这项工作,并实现了性能改进我不知道使用缓存方法有任何内存泄漏问题,我对该主题的大部分阅读建议将缓存作为最佳实践。

除此之外,如果您执行此操作可能会有所帮助,即添加命名约定来缓存此类型的变量。例如,在变量前加上$:

var $someWidget = $("#some_widget");

有些人不喜欢这样,但我发现它在视觉上跟踪哪些变量可以使用jQuery函数时很有用。

答案 2 :(得分:1)

是的,你是对的。我唯一想补充的是 var query_result = $("some_selector")实际上是将查询结果缓存到变量中以供以后使用。如果查询的结果恰好是一个小部件,那么正在缓存它。显而易见的优点是,当您使用此缓存查询时,jQuery将不必再次查询DOM以为您构建结果。但缺点是缓存的结果就像执行查询时的DOM快照。因此,如果在稍后阶段操作了dom,执行$("previous_selector")将返回与缓存query_result不同的内容,这可能不是您所期望的。

不完全确定内存泄漏,已经看到很多程序员都使用这种缓存技术,也是推荐的。