首页 / 知识
JS性能优化createDocumentFragment
2023-04-11 13:21:00

JS性能优化createDocumentFragment
我们用原生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节点,只做了一次操作
|
最新内容
相关内容
python模块能优化Python的运行速度
python模块能优化Python的运行速度吗?,代码,平台,培训,官网,环境,工作,系统,模块,程序,语言,今天介绍下Psyco模块,Psyco模块可以使你的Pythonpython字典和json的比较
python字典和json的比较,数据,位置,培训,概念,字典,对象,格式,前端,缩写,字符串,python字典和json的比较1、概念不同(1)dict是一个完整的数据关于Windows:如何从磁盘获得良好的
关于Windows:如何从磁盘获得良好的并发读取性能,关于Windows:如何从磁盘获得良好的并发读取性能,跟进,自己的,有什么,答案,How to obta关于优化:在Getter / Setter或其他
关于优化:在Getter / Setter或其他地方进行数据验证?,关于优化:在Getter / Setter或其他地方进行数据验证?,优化,验证,是一个,我想,Data在性能开始下降之前,MySQL数据库能
在性能开始下降之前,MySQL数据库能达到多少?,在性能开始下降之前,MySQL数据库能达到多少?,性能,数据库,数量,什么时候开始,How big can a关于性能:Python中最有效的图形数据
关于性能:Python中最有效的图形数据结构是什么?,关于性能:Python中最有效的图形数据结构是什么?,节点,数据,边缘,应于,What is the most关于性能:前10000个质数最有效的代
关于性能:前10000个质数最有效的代码?,关于性能:前10000个质数最有效的代码?,想打,您的,代码,质数,Most efficient code for the first 1css小白起步用DW做JS+JQ+JSP从入门
css小白起步用DW做JS+JQ+JSP从入门到精通整理,css,小白,起步,用,做,JS+JQ+JSP,从,入门,到,精通,, p标签选择器 class类选择器一些编写高性能HTML应用的建议
一些编写高性能HTML应用的建议,一些,编写,高性能,HTML,应,用的,建议,你,怎么,,你怎么能提高网页性能? 大多数开发者会通过JavaScr关于getJSON的弃用通知
关于getJSON的弃用通知,关于,getJSON,的,弃用,通知,Deprecation,Notice,弃用,, Deprecation Notice(弃用通知) jQuery 1.JavaScript中json是存储和传输数据
JavaScript中json是存储和传输数据的格式,JavaScript,中,json,是,存储,和,传输,数据,的,格式,,JSON 是存储和传输数据的格式什么是Knockout.Js中的Observables监控属
Knockout.Js中的Observables监控属性,Knockout.Js,中的,Observables,监控,属性,Knockout.Js,,Knockout.Js中的Observables监控属性K