`

JS性能优化之创建文档碎片(document.createDocumentFragment)【转】

 
阅读更多

讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么。
         在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于少量的更新,一条条循环插入也会运行很好,也是我们常用的方法。代码如下: 

复制代码
for(var i=0;i<5;i++)

{ 

    var op = document.createElement("span"); 

    var oText = document.createTextNode(i); 

    op.appendChild(oText); 

    document.body.appendChild(op); 

} 
复制代码

但是,如果当我们要向document中添加大量数据时(比如1w条),如果像上面的代码一样,逐条添加节点,这个过程就可能会十分缓慢。 

当然,你也可以建个新的节点,比如说div,先将oP添加到div上,然后再将div添加到body中.但这样要在body中多添加一个<div></div>.但文档碎片不会产生这种节点.

复制代码
var oDiv = document.createElement("div"); 


for(var i=0;i<10000;i++)

{ 

    var op = document.createElement("span"); 

    var oText = document.createTextNode(i); 

    op.appendChild(oText); 


    oDiv.appendChild(op);  

} 


document.body.appendChild(oDiv); 
复制代码

为了解决这个问题,我们可以引入createDocumentFragment()方法,它的作用是创建一个文档碎片,把要插入的新节点先附加在它上面,然后再一次性添加到document中。代码如下: 
代码如下:

复制代码
//先创建文档碎片

var oFragmeng = document.createDocumentFragment(); 
for(var i=0;i<10000;i++) { var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText); //先附加在文档碎片中 oFragmeng.appendChild(op); } //最后一次性添加到document中 document.body.appendChild(oFragmeng);
复制代码

经过测试,在ie,firefox下性能明显得以提高。大家可以自己测试下。 
前端性能优化都是从一些细节地方做起的,如果不加以注意,后果很严重。

PS:这个优化跟循环添加html代码有点类似。

分享到:
评论

相关推荐

    JavaScript性能优化 创建文档碎片(document.createDocumentFragment)

    ### JavaScript性能优化之创建文档碎片(document.createDocumentFragment) 在探讨`document.createDocumentFragment()`方法之前,我们首先需要理解浏览器在处理DOM(文档对象模型)节点插入时的基本行为。DOM是HTML...

    浅析document.createDocumentFragment()与js效率

    为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。这是我写的一个简单的测试页面: 代码如下:&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 ...

    初识javascript 文档碎片

    在JavaScript中,文档碎片(Document Fragment)是一种轻量级的文档结构,它允许开发者在不直接操作DOM树的情况下,一次性地处理多个节点。...因此,理解并恰当运用文档碎片是提升JavaScript应用性能的关键技巧之一。

    JavaScript文档碎片操作实例分析

    JavaScript文档碎片操作是一种高效处理DOM元素的技术,尤其在需要大量添加或删除DOM节点时,能够显著提升页面性能。文档碎片(Document Fragment)并不是真正意义上的DOM节点,而是一个轻量级的容器,它允许我们在...

    脚本动态创建复选框,添加事件

    `document.createDocumentFragment()`函数用于创建一个新的文档碎片。文档碎片是一个特殊的DOM节点,可以包含多个子节点,但不会直接显示在页面上。使用文档碎片可以提高DOM操作的效率,因为它可以将多个DOM操作合并...

    JavaScript特效

    1. 尽量减少DOM操作:频繁修改DOM会降低性能,可以使用文档碎片(document.createDocumentFragment)或数组操作后再一次性插入DOM。 2. 使用事件代理:为父元素绑定事件,通过event.target判断实际触发事件的子元素...

    dom.zip

    2. 使用文档碎片:创建一个文档碎片`document.createDocumentFragment`,在此处进行节点操作,最后再一次性添加到DOM中,可提高效率。 3. 使用CSS选择器:更高效的CSS选择器(如ID选择器)比类选择器更快,因此在...

    js dom 文档

    因此,了解DOM操作的最佳实践至关重要,例如使用文档碎片(`document.createDocumentFragment()`)、批量操作(收集多个修改并一次性应用)以及使用CSS选择器(更高效地定位元素)等。 总的来说,JavaScript DOM是...

    高性能javascript设计

    通过减少DOM操作次数,使用文档碎片(document.createDocumentFragment)、事件委托等技术可以提升性能。 3. **事件处理**:避免使用内联事件处理函数,改为使用addEventListener或attachEvent。同时,利用事件代理...

    javascript动态添加table

    当动态添加大量数据时,考虑使用`document.createDocumentFragment()`创建一个文档碎片,一次性插入到DOM中,以减少重绘和回流的次数,提高性能。 10. **现代JavaScript特性** 使用ES6及以上版本的特性,如模板...

    js.dom学习资料和笔记

    2. **使用文档碎片**:通过`document.createDocumentFragment()`创建文档碎片,先在此处构建新结构,最后再添加到DOM,减少对页面的影响。 3. **事件委托**:将事件监听器添加到父元素,利用事件冒泡机制处理子元素...

    12.JS动态添加员工作业.zip

    可以使用`document.createDocumentFragment()`创建一个DOM碎片,将所有元素添加到碎片后再将其一次性添加到DOM树中,以提高效率。 7. **AJAX请求**:在实际应用中,员工数据可能从服务器获取。使用`XMLHttpRequest`...

    js-Dom.zip

    10. **文档碎片**:`document.createDocumentFragment()` 用于创建一个不在DOM树中的临时节点集合,可以在不引起页面重绘的情况下批量操作元素。 在“js-Dom”压缩包中,可能包含了以上操作的示例代码,学习和理解...

    JS动态添加

    - **createDocumentFragment**:为了提高性能,可以先创建一个文档碎片,然后一次性插入多个元素,避免频繁操作DOM。 3. **事件处理**: - **事件监听**:使用`addEventListener()`可以为元素添加事件监听器,如`...

    javascript动态添加tr节点

    此外,现代JavaScript提供了更简洁的DOM操作方式,如使用`template literals`(模板字符串)和`insertAdjacentHTML()`方法,或者利用`fragment`(文档碎片)提高性能。例如: ```javascript var fragment = ...

    JavaScript DOM高级程序设计

    通过创建文档碎片(`document.createDocumentFragment()`)、批量操作和缓存引用等方法可以优化DOM操作。 10. **jQuery和其他库**:虽然本资源可能不涉及jQuery等库,但它们提供了更简洁的API来操作DOM,简化了跨...

    节点基础一

    9. **性能优化**:频繁操作DOM会消耗大量资源,因此建议使用DOM碎片(`document.createDocumentFragment()`)批量处理节点,或使用`innerHTML`一次性替换多个元素,以减少重绘和回流。 10. **DOM遍历技巧**:了解`...

Global site tag (gtag.js) - Google Analytics