Gul*_*rYA 6 html javascript performance dom traversal
我想将 DOM 树扁平化为Array
. 结果应包括根作为第一个条目。首选纯 JS 解决方案。实现这一目标最快的方法是什么?
HTML 结构示例:
<div class="tested-root">
<span></span>
<span></span>
<div>
<span></span>
<span></span>
</div>
<div>
<span></span>
<span></span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
[div.tested-root, span, span, div, span, span, div, span, span]
或类似的(这是 DFS,但对于这个问题来说并不重要)。
从以下三种方法中,哪种方法最快:
querySelectorAll
NodeIterator
TreeWalker
Gul*_*rYA 12
我最近才来尝试另外几个。下面的结果从最慢到最快,同时指定较慢的一项如何比最快的一项。
基于 Chrome 的结果。Safari 浏览器显示的数字大致相同。Firefox 的该性能应用程序存在问题且未经验证。
const list = Array.from(root.querySelectorAll('*'));
list.unshift(root);
Run Code Online (Sandbox Code Playgroud)
const list = [root, ...root.querySelectorAll('*')];
Run Code Online (Sandbox Code Playgroud)
const list = Array.from(root.querySelectorAll('*'));
list.unshift(root);
Run Code Online (Sandbox Code Playgroud)
const list = [root, ...root.querySelectorAll('*')];
Run Code Online (Sandbox Code Playgroud)
const list = [root];
if (root.childElementCount) {
const tw = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
let next;
while (next = tw.nextNode()) {
list.push(next);
}
}
Run Code Online (Sandbox Code Playgroud)
...
更快unshift
TreeWalker
它是迄今为止最快的可以在此处找到基准测试。
归档时间: |
|
查看次数: |
2513 次 |
最近记录: |