0

因为用 JQuery 找节点的成本很大,所以我构建了一个非常简单的函数

window.selectorToObject = {}

function get(selector){
    if(typeof selector === "undefined") 
      return null;
    if(selector in window.selectorToObject) 
      return window.selectorToObject[selector];
    window.selectorToObject[selector] = $(selector);
    return $(selector);
}

因此,$(selector)我们将不再这样做,而是简单地get(selector).

经过简单的测试,差异是显着的:

<div id="test">
  <div id="child1">
    <div id="child2">
       <div id="child3"></div>
    </div>
  </div>
</div>

在此处输入图像描述

现在我只是担心关联数组的大小会在每个新的get().

在 Javascript 中扩展关联数组的大小是否有任何成本?

4

1 回答 1

2

这仅在您对同一个选择器进行大量调用时才有帮助。如果您正在这样做,那么是的,它可能会有所帮助,但是如果它们完全相同,您应该将访问缓存在本地范围的变量中。

但是,在动态内容的情况下,您也会破坏选择器。如果您稍后调用get('.mydiv')然后添加另一个<div class="mydiv"></div>get()将返回一个带有最新div缺失的对象。

正如您所提到的,这里还有一个内存成本。您正在用速度换取内存占用。一般来说,这不是问题,但 jQuery 选择器的性能也不是问题,除非您正在执行大量选择器调用。

实际上,我怀疑任何人都需要这个。除非确实是个问题,否则不要进行优化。您应该始终有编写好的代码的想法,但要抵制过度优化的冲动。

于 2013-02-12T17:25:18.110 回答