千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:长沙千锋IT培训  >  技术要点  >  千锋长沙前端培训:性能优化之文档碎片分享

千锋长沙前端培训:性能优化之文档碎片分享

来源:千锋教育
发布人:千锋长沙
时间: 2021-11-19 16:54:42

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

u=600336914,2537700399&fm=26&fmt=auto.webp

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

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

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

document.createDocumentFragment()

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

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

例:

for(var i=1;i<=5;i++){

var p = document.createElement('p')

p.innerText = i

list.appendChild(p)

}

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

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

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一样,但不会多嵌套标签。

例:

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);

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

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>