JS性能优化之文档片段createDocumentFragment

时间: 2018-08-28阅读: 3158标签: 优化

我们用原生js进行开发时,经常会用到两种更新DOM节点的方法:innerhtml 和 appendChild() 。其中 innerhtml 会完全替换掉原先的节点内容,如果我们是想向元素追加子节点的话,那么 innerHTML 显然满足不了需求。 转而我们就会想到 appendChild() 方法。appendChild方法接收的参数类型为单个的节点类型对象。因此当我们要添加多个子节点时,只能通过循环来实现。

例如:

for (var i = Things.length - 1; i >= 0; i--) {
    element.appendChild(Things[i]);
}

 

我们都知道,对DOM的操作次数越多,性能消耗也就越大。像这样的循环添加节点,循环了多少次,就对DOM操作了多少次,性能消耗明显是不划算的。我们就会想,能否把要插入的节点进行打包,然后一次性添加呢?如果可以的话,那就只对DOM做了一次操作了。要实现打包,这就要用到我们的主角 createDocumentFragment。

DocumentFragments是DOM节点。它们不是主DOM树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到DOM树。在DOM树中,文档片段被其所有的子元素所代替。因为文档片段存在于内存中,并不在DOM树中,所以将子元素插入到文档片段时不会引起页面回流(对元素位置和几何上的计算)。因此,使用文档片段通常会带来更好的性能。

 

示例:创建主流web浏览器列表

HTML

<ul id="ul"></ul>

 

JavaScript

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

var fragment = document.createDocumentFragment();
var browsers = ['Firefox', 'Chrome', 'Opera', 
    'Safari', 'Internet Explorer'];

browsers.forEach(function(browser) {
    var li = document.createElement('li');
    li.textContent = browser;
    fragment.appendChild(li);  // 此处往文档片段插入子节点,不会引起回流 (相当于打包操作)
});

element.appendChild(fragment);  // 将打包好的文档片段插入ul节点,只做了一次操作


参考资料: https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createDocumentFragment


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/1035

网站web前端常见的优化措施

一般网站优化都是优化后台,如接口的响应时间、SQL优化、后台代码性能优化、服务器优化等。高并发情况下,对前端web优化也是非常重要的。下面说说几种常见的优化措施。

如何对 React 函数式组件进行优化?

本文只介绍函数式组件特有的性能优化方式,类组件和函数式组件都有的不介绍,比如 key 的使用。另外本文不详细的介绍 API 的使用,后面也许会写,其实想用好 hooks 还是蛮难的。

网络串流播放_HTML5如何优化视频文件以便在网络上更快地串流播放

无论你正在将 GIF 动图转换为 MP4 视频,还是手头已经有一大堆 MP4 视频,你都可以优化文件结构,以使得这些视频更快地加载和播放。通过重组 atoms 将 moov 放到文件开头,浏览器可以避免发送额外的 HTTP range request 请求来搜寻和定位 moovatom

优化(Vue)Javascript文件体积

可以看到竟然有8M和5.3M这么大的文件!在本地开发时由于本地网络打开文件很快感受不明显,但当把这些文件部署到服务器上,能明显感觉首屏打开时间是非常慢的。好,看到了问题,我们来优化~

webpack构建速度常规优化方法

使用webpack.DllPlugin优化,其实并没有优化速度,只是把一些不需要经常变更的部分提前构建,之后只需要构建变更的部分就可以了,确实优化了时间,使用external,不构建基础脚本,使用外部脚本引入,确实减少了时间

性能优化小册 - React 搜索优化:防抖、缓存、LRU

最近要对 react 项目做重构优化等相关的工作,由于有好长时间没碰 React 了,今天索性把一个基于关键字搜索的 demo 做一下简单优化,在此记录以下。

前端性能优化总结

原则:多使用内存,缓存或者其他方法;减少CPU计算,减少网络请求;减少IO操作(硬盘读写).加载资源优化:静态资源的合并和压缩。静态资源缓存(浏览器缓存策略)。使用CDN让静态资源加载更快。

34个JavaScript简写优化技术

开发者的生活总是在学习新的东西,跟上变化不应该比现在更难,我的动机是介绍所有 JavaScript 的最佳实践,比如简写功能,作为一个前端开发者,我们必须知道,让我们的生活在 2021 年变得更轻松。

Webpack 打包后代码执行时机分析与优化

代码执行时机将决定着是否能够正常执行,当依赖文件没加载完成就开始执行、使用对应模块,那么将会导致执行异常。这在“ 存在资源加载失败时,加载重试影响原来文件的执行顺序 ”的场景下尤为常见。

MySQL查询优化

MySQL的查询怎么才能更快,更合理?除了加索引还有什么可以学习的呢?要想更好地学习某样东西,从其原理和运作方式入手更容易掌握。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!