为什么在DOM中追加元素的速度比使用javascript片段快?

Agconti

考虑将lis追加到这三个版本ul

天真的版本(慢20%):

var ul = document.getElementById('targetUl');

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML = Math.random();
  ul.appendChild(li);
}

使用JavaScript片段(慢4%):

var ul = document.getElementById('targetUl'),
    fragment = document.createDocumentFragment();

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML = Math.random();
  fragment.appendChild(li);
}
ul.appendChild(fragment);

追加到DOM中尚未存在的元素(快1.26%):

var ul = document.createElement('ul'),
    div = document.getElementById('targetDiv');

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML = Math.random();
  ul.appendChild(li);
}
div.appendChild(ul);

为什么追加到保存在内存中的DOM元素比追加到Fragment既然fragment是为了这个唯一目的而创建的,不是应该更快吗?fragment除了在附加之前不必包含顶级元素之外,使用over保留在内存中的元素是否有任何优势

检查jsperf的测试输出:http ://jsperf.com/javascript-fragments-tests

jfriend00

从文档片段中插入多个子代(特别是当您的测试有200个子代时)要比插入单个父<ul>标记多得多

因此,使用片段,您可以将片段中的200个<li>元素重新链接到<ul>DOM中标签。

在您的最后一个代码块中,您只是<ul>通过将一个标签插入DOM来重新标记一个标签。

因此,在您的特定示例中,使用文档片段为插入DOM的创建工作要比您运行仅插入单个<ul>标签的最后一个示例的方式多


当您想在同一级别上跟踪一整串元素,然后用一行代码插入它们并且您的父级已经在DOM中时,该片段具有其战术优势。但是,相对于您可以将所有项目从DOM收集到其实际父节点下的同一级别并从DOM中收集然后仅插入该父节点的情况而言,它并非总是最快的处理方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python timeit.timeit-片段版本的运行速度比使用lambda快,为什么?

通过 JavaScript Dom 动态追加元素

为什么在Scala中压缩速度比压缩速度快?

在此列表中,为什么追加元素后重复?

为什么在 PgAdmin 中 Java 应用程序查询速度慢但速度快?

使用appendchild属性在div中追加元素

在JavaScript中附加元素

使用 JavaScript 添加元素

为什么===比PHP中的==快?

为什么在javascript中,双查询比单查询快?

在javaFx中,为什么在向窗口添加元素时为什么需要调用“ getChildren()”?

为什么我的页面在使用 React 时没有通过向我的数组中添加元素来更新

DOM操作在AngularJS中添加元素

如何使用javascript函数在数组中添加元素

为什么在SwiftUI中,“颜色”视图的淡入速度似乎比“图像”视图快?

为什么在这段代码中 CPU 运行速度比 GPU 快?

为什么使用Future的此示例的运行速度没有基准测试快?

为什么使用.then()的速度快3倍,然后等待测试?

为什么2012年Pandas在python中的合并速度比data.table在R中的合并速度快?

为什么2012年Pandas在python中的合并速度比data.table在R中的合并速度快?

为什么Dask使用from_pandas计算数据帧的速度比直接使用dask读取数据的速度快?

是否可以在React的Virtual DOM中添加元素,但使用jQuery附加到真实DOM?

在列表上追加元素-javascript

为什么元组大小在其列表元素中添加元素后不会改变

为什么将数据写入磁盘的速度与保留在内存中的速度一样快?

最后使用jQuery提取并追加元素

jQuery 使用对象值追加元素

为什么setImmediate()的运行速度比顺序代码快?

为什么Java读取大文件的速度比C ++快?