最近我一直想知道在重复选择器之间是否存在性能差异,或者只是使用var并将选择器存储在那里并且只是引用它。
$('#Element').dothis();
$('#Element').dothat();
$('#Element').find('a').dothat();
或只是
var Object = $('#Element');
Object.dothis();
Object.dothat();
$('a', Object).dothat();
我更喜欢第二种方式,因为它看起来更干净,更易于维护。
答案 0 :(得分:7)
肯定存在性能差异,因为每次都不必执行sizzle,但是,还存在功能差异。如果dom恰好在第1次和第3次调用之间发生变化,则缓存的jQuery对象仍将包含旧的元素集。如果您缓存一个集合然后在回调中使用它,通常会发生这种情况。
答案 1 :(得分:4)
我更喜欢第二种方式。即使元素ID或类发生更改, 也更容易维护代码 。
答案 2 :(得分:3)
还有另一种快速方式。 它和你的第二个代码一样快。
$('#Element')
.dothis()
.dothat()
.find('a')
.dothat();
答案 3 :(得分:2)
花费Ghommey的方法
var Object = $('#Element');
Object
.dothis()
.dothat()
.find('a')
.dothat();
更快,并存储该对象供以后使用。
答案 4 :(得分:1)
第二种方式具有性能优势。它可能会也可能不会很好,但它会更好。在第一个版本中,你正在进行dom遍历4次,在第二个版本中你只进行2次。
关于加速jQuery的非常好的文章:http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/
答案 5 :(得分:1)
将jQuery选择的结果存储到变量中的速度更快。这是因为每当您尝试访问结果时,jQuery都不需要查找结果。
我整理了一些效果指标:http://jsperf.com/jquery-selectors-vs-stored-variable
在Mac OS X 10.8.2上的Chrome 26.0.1410.63上:
选择:40,276 ops / sec
存储变量:594,031,358 ops / sec