因为使用 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 中扩展关联数组的大小会产生任何成本吗?
最佳答案
仅当您对同一选择器进行大量调用时,这才会有帮助。如果您正在这样做,那么是的,它可能会有所帮助,但您应该在本地范围的变量中缓存访问(如果它们无论如何都完全相同)。
但是,在动态内容的情况下,您也会破坏选择器。如果您调用get('.mydiv')
然后添加另一个 <div class="mydiv"></div>
后来,get()
将返回一个具有最新 div
的对象失踪了。
正如您提到的,这里还有内存成本。您正在以速度换取内存占用。一般来说,这不是问题,但 jQuery 选择器的性能也不是问题,除非您进行大量选择器调用。
实际上,我怀疑有人会需要这个。除非确实存在问题,否则不要进行优化。您应该始终致力于编写优秀的代码,但要抵制过度优化的冲动。
关于javascript - 在 Javascript 中扩展关联数组的成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838110/