我应该在全局命名空间中缓存jQuery选择器吗?

时间:2017-08-29 18:31:57

标签: javascript jquery performance

详细信息:

应该缓存常用的jQuery选择器。

var $thing = $("#thing");
// ...lots of invocations of $thing...

选择一个外部div然后使用.find()获取内部元素可能很方便(有时候,arguably more performant),特别是如果你要从div中抓取多个东西

var $outerDiv = $("div#outer");
var $thing1 = $outerDiv.find(".thing1");
var $thing2 = $outerDiv.find(".thing2");
// ...etc....

但是,如果我有很多外部div并且在最初找到必要的孩子后从不使用它们会怎么样?

var $outerDiv1 = $("div#outer1");
var $foo1 = $outerDiv1.find(".foo1");
var $foo2 = $outerDiv1.find(".foo2");
// ...etc....

var $outerDiv2 = $("div#outer2");
var $bar1 = $outerDiv2.find(".bar1");
var $bar2 = $outerDiv2.find(".bar2");
// ...etc....

现在我有$outerDiv1$outerDiv2等位于占据内存的全局命名空间中。

我的问题是:

  • 我应该在全局命名空间中缓存jQuery选择器吗?为什么(不是)?
  • 如果我将缓存的选择器放在除全局之外的某个命名空间中,那么在垃圾收集中是否会清除以后未引用的$outerDiv*变量?
  • 典型网页的绩效成本/收益是否可以忽略不计?

注意:

我的问题假定问题accepted answer"jQuery object: to cache or not to cache?"的真实性。它不是重复的,因为如果我们知道一些全局缓存的选择器将不再被使用,它会考虑内存影响而扩展。

0 个答案:

没有答案