提问人:ThePixelPony 提问时间:5/20/2014 最后编辑:ThePixelPony 更新时间:5/20/2014 访问量:6815
为什么要缓存jQuery对象?
Why cache jQuery objects?
问:
那么,为什么我们应该缓存jQuery对象呢?
在以下场景中:
var foo = $('#bar');
foo.attr('style','cool');
foo.attr('width','123');
$('#bar').attr('style','cool');
$('#bar').attr('width','123');
为什么第一种选择比第二种选择好得多?
如果是因为性能,它如何减少使用?
答:
0赞
ThePixelPony
5/20/2014
#1
jQuery 选择器在整个 DOM 中搜索匹配的元素,然后返回结果。$('#foo')
缓存这些结果意味着 jQuery 不必在每次使用选择器时都搜索 DOM。
EDIT:是jQuery用来搜索DOM的,但jQuery永远不够用。document.getElementById()
评论
2赞
Jason Sperske
5/20/2014
你的答案是正确的,但在ID选择器的特定实例中,jQuery只是使用document.getElementById()
19赞
David
5/20/2014
#2
因为 jQuery 函数中有很多代码,如果使用相同的输入多次执行它,则会产生不必要的开销,从而产生相同的输出。通过缓存结果,您可以存储对要查找的确切元素或元素集的引用,这样您就不必再次搜索整个 DOM(即使搜索速度相当快)。在许多情况下(代码量很少的简单页面),您不会注意到差异,但在您这样做的情况下,可能会有很大的差异。
您可以通过在 jsPerf 中测试您的示例来了解这一点。
出于可读性目的,您还可以将其视为 Introduce Explain Variable 重构模式的一个示例,尤其是比问题中的示例更复杂的示例。
评论
$('#bar')
#
$('#bar').attr('style','cool').attr('width','100');