全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

性能优化之文档碎片

发布时间:2022-06-06 13:41:00
发布人:wjy

小伙伴们前端面试的时候经常会被问到关于性能优化方面的问题,那么这篇文章会详细的解释性能优化解决方法之一“文档碎片”

性能优化之文档碎片

一般情况下,在操作DOM结构的时候,经常会说非常消耗性能,原因是我们向DOM中添加新的元素,DOM会立刻更新。也就是添加一次更新一次,如果添加100个节点,那么就得更新100次,很浪费资源呀

每次操作DOM节点插入时,浏览器会触发重排重绘,为了提高效率,要尽可能的减少重排重绘,即应该减少DOM节点的插入。有一种方法就是利用文档碎片去做。

文档碎片是一种虚拟的DOM节点,存在于内存中,跟实际的DOM节点之间没有关系,当我们需要给一个节点中插入多个子节点的时候,完全可以将多个子节点先插入到文档碎片中,所有子节点都放到文档碎片中后,再将文档碎片插入到实际的节点中,这样就减少了很多节点直接插入到父节点中的次数了,也就是本来多次触发重排重绘的操作,有了文档碎片中,只需要触发一次重排重绘了。

文档碎片创建:

```js
document.createDocumentFragment()
```

这个方法返回一个文档碎片,即虚拟DOM节点。

对于文档碎片的插入操作,跟实际的DOM节点操作是一样的。

例:

```js
for(var i=1;i<=5;i++){
    var p = document.createElement('p')
    p.innerText = i
    list.appendChild(p)
}
```

通过循环创建了5个p标签,每创建一个就将这个p标签。创建插入的节点较少时,页面会立马发生变化。但一旦创建插入的节点多了以后,这个过程就可能会十分缓慢,例如插入10000条。

当然也可以提前先创建一个空节点,将所有子节点插入到这个节点中,然后再将这个节点插入到目标节点中。

```js
var oDiv = document.createElement('div');
for(var i=1;i<=10000;i++){
    var p = document.createElement('p');
    p.innerText = i;
    oDiv.appendChild(p);
}
list.appendChild(oDiv);
```

但这样会在list中多嵌套一个div标签。

而文档碎片的意义跟这个div一样,但不会多嵌套标签。

例:

```js
var oFragmeng = document.createDocumentFragment();
for(var i=1;i<=10000;i++){
    var p = document.createElement('p');
    p.innerText = i;
    oFragmeng.appendChild(p);
}
list.appendChild(oFragmeng);
```

经过测试,在各个浏览器下性能明显得到提高。

更多关于web培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

相关文章

企业抖音小店保证金是多少

企业抖音小店保证金是多少

2023-10-08
抖音怎么弄抖音小店店铺

抖音怎么弄抖音小店店铺

2023-10-08
抖音小店怎么设置新人券领不到

抖音小店怎么设置新人券领不到

2023-10-08
开通抖音小店的保证金在哪里退

开通抖音小店的保证金在哪里退

2023-10-08

最新文章

上海物联网培训一般费用多少

上海物联网培训一般费用多少

2023-09-12
北京物联网培训费用大概多少

北京物联网培训费用大概多少

2023-09-12
北京物联网培训需要费用高不高

北京物联网培训需要费用高不高

2023-09-12
上海效果好的物联网培训费用高吗

上海效果好的物联网培训费用高吗

2023-09-12
在线咨询 免费试学 教程领取