javascript - 在 Javascript 中扩展关联数组的成本?

标签 javascript jquery

因为使用 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>

enter image description here

现在我只担心关联数组的大小会在每个新的 get() 处增长。

在 Javascript 中扩展关联数组的大小会产生任何成本吗?

最佳答案

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

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

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

实际上,我怀疑有人会需要这个。除非确实存在问题,否则不要进行优化。您应该始终致力于编写优秀的代码,但要抵制过度优化的冲动。

关于javascript - 在 Javascript 中扩展关联数组的成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838110/

相关文章:

javascript - 自动将所有输入值保存到 localStorage 并在页面重新加载时恢复它们

javascript - 单击链接不应触发 parent 的 onclick 事件

对象 json 数据内的 javascript/jquery 对象

javascript - 测验完成后将分数重置为 0

c# - 使用 MVC 的异步发布模型和负载响应

javascript - 上下滚动时在一个 div 中 float 一个 div(不是在整个屏幕上)

javascript - JS从数组中无间隙地删除元素

javascript - 在 Microsoft Windows 上,当使用 HTML5 拖放时,在拖放过程中我确实看到了拖动图标(幻影)

javascript - 在 iPhone 浏览器上下载 VCF 文件

javascript - 文本在对话框中排成一行