【发布时间】:2014-10-30 21:19:16
【问题描述】:
我偶然发现了这个jsperf。
它测试编辑仅通过 id 访问或通过缓存选择器通过 id 访问的元素的 html 的相对性能。
编辑的元素深度为 17 级。
jsperf 实际上报告 not 使用缓存的选择器更快。
<script src="http://code.jquery.com/jquery-latest.min.js"
type="text/javascript"></script>
</script>
<div id="container"><div><div><div><div><div><div>
<div><div><div><div><div><div><div>
<div>
<div>
</div>
<div>
</div>
<div class="robotarm">
</div>
<div>
<div id="robotarm">
</div>
</div>
<div class="robotarm">
</div>
<div class="robotarm">
</div>
<div>
</div>
</div>
</div>
</div></div></div></div></div></div></div>
</div></div></div></div></div></div></div>
<div><div><div><div><div><div><div>
</div></div></div></div></div></div></div>
<div><div><div><div><div><div><div>
</div></div></div></div></div></div></div>
<div><div><div><div><div><div><div>
</div></div></div></div></div></div></div>
<div><div><div><div><div><div><div>
</div></div></div></div></div></div></div>
<script>
Benchmark.prototype.setup = function() {
function cached() {
$div = $('#container');
for (i = 0; i < 1000; i++){
$div.find('#robotarm').html('foo');
}
}
function raw() {
for (i = 0; i < 1000; i++){
$('#robotarm').html('foo');
}
}
};
</script>
但是,性能很糟糕。为什么,为什么不使用缓存选择器进行选择会更好?
【问题讨论】:
-
删除对 .html 的调用显着增加了两者的每秒操作数。它当然不会改变结果
标签: javascript performance dom caching jquery-selectors