讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么。
在浏览器中,我们一旦把节点添加到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) 在探讨`document.createDocumentFragment()`方法之前,我们首先需要理解浏览器在处理DOM(文档对象模型)节点插入时的基本行为。DOM是HTML...
为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。这是我写的一个简单的测试页面: 代码如下:<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 ...
在JavaScript中,文档碎片(Document Fragment)是一种轻量级的文档结构,它允许开发者在不直接操作DOM树的情况下,一次性地处理多个节点。...因此,理解并恰当运用文档碎片是提升JavaScript应用性能的关键技巧之一。
JavaScript文档碎片操作是一种高效处理DOM元素的技术,尤其在需要大量添加或删除DOM节点时,能够显著提升页面性能。文档碎片(Document Fragment)并不是真正意义上的DOM节点,而是一个轻量级的容器,它允许我们在...
`document.createDocumentFragment()`函数用于创建一个新的文档碎片。文档碎片是一个特殊的DOM节点,可以包含多个子节点,但不会直接显示在页面上。使用文档碎片可以提高DOM操作的效率,因为它可以将多个DOM操作合并...
1. 尽量减少DOM操作:频繁修改DOM会降低性能,可以使用文档碎片(document.createDocumentFragment)或数组操作后再一次性插入DOM。 2. 使用事件代理:为父元素绑定事件,通过event.target判断实际触发事件的子元素...
2. 使用文档碎片:创建一个文档碎片`document.createDocumentFragment`,在此处进行节点操作,最后再一次性添加到DOM中,可提高效率。 3. 使用CSS选择器:更高效的CSS选择器(如ID选择器)比类选择器更快,因此在...
因此,了解DOM操作的最佳实践至关重要,例如使用文档碎片(`document.createDocumentFragment()`)、批量操作(收集多个修改并一次性应用)以及使用CSS选择器(更高效地定位元素)等。 总的来说,JavaScript DOM是...
通过减少DOM操作次数,使用文档碎片(document.createDocumentFragment)、事件委托等技术可以提升性能。 3. **事件处理**:避免使用内联事件处理函数,改为使用addEventListener或attachEvent。同时,利用事件代理...
当动态添加大量数据时,考虑使用`document.createDocumentFragment()`创建一个文档碎片,一次性插入到DOM中,以减少重绘和回流的次数,提高性能。 10. **现代JavaScript特性** 使用ES6及以上版本的特性,如模板...
2. **使用文档碎片**:通过`document.createDocumentFragment()`创建文档碎片,先在此处构建新结构,最后再添加到DOM,减少对页面的影响。 3. **事件委托**:将事件监听器添加到父元素,利用事件冒泡机制处理子元素...
可以使用`document.createDocumentFragment()`创建一个DOM碎片,将所有元素添加到碎片后再将其一次性添加到DOM树中,以提高效率。 7. **AJAX请求**:在实际应用中,员工数据可能从服务器获取。使用`XMLHttpRequest`...
10. **文档碎片**:`document.createDocumentFragment()` 用于创建一个不在DOM树中的临时节点集合,可以在不引起页面重绘的情况下批量操作元素。 在“js-Dom”压缩包中,可能包含了以上操作的示例代码,学习和理解...
- **createDocumentFragment**:为了提高性能,可以先创建一个文档碎片,然后一次性插入多个元素,避免频繁操作DOM。 3. **事件处理**: - **事件监听**:使用`addEventListener()`可以为元素添加事件监听器,如`...
此外,现代JavaScript提供了更简洁的DOM操作方式,如使用`template literals`(模板字符串)和`insertAdjacentHTML()`方法,或者利用`fragment`(文档碎片)提高性能。例如: ```javascript var fragment = ...
通过创建文档碎片(`document.createDocumentFragment()`)、批量操作和缓存引用等方法可以优化DOM操作。 10. **jQuery和其他库**:虽然本资源可能不涉及jQuery等库,但它们提供了更简洁的API来操作DOM,简化了跨...
9. **性能优化**:频繁操作DOM会消耗大量资源,因此建议使用DOM碎片(`document.createDocumentFragment()`)批量处理节点,或使用`innerHTML`一次性替换多个元素,以减少重绘和回流。 10. **DOM遍历技巧**:了解`...