gpt4 book ai didi

javascript - 操作因 DOM 复杂性而降低?

转载 作者:行者123 更新时间:2023-12-02 17:01:12 27 4
gpt4 key购买 nike

我偶然发现了这个jsperf .

它测试编辑仅通过 id 或通过缓存选择器通过 id 访问的元素的 html 的相对性能。

编辑的元素深度为 17 层。

jsperf 实际上报告使用缓存的选择器速度更快。

<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>

然而,表现却很糟糕。为什么,为什么最好选择没有缓存的选择器?

最佳答案

该选择器没有任何“缓存”内容,命名完全错误。

在“原始”版本中,它们具有:

$('#robot-arm').html('foo');

这将得到优化

$(document.getElementById("robot-arm")).html('foo');

但是“缓存”版本有:

$div = $('#container');

然后

$div.find('#robot-arm').html('foo');

无法针对 document.getElementById 调用进行优化,因为搜索范围仅限于 #container 元素。但是 getElementById从 DOM 获取元素的最快方法。所以当然它会慢一些,非常明显。

“缓存”版本如下所示:

var $div = $("#robot-arm");

然后

$div.html('foo');

这(稍微)比测试的“原始”版本快:http://jsperf.com/using-id-selector-with-or-without-cached-scope/4

关于javascript - 操作因 DOM 复杂性而降低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com