讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么。
         在浏览器中,我们一旦把节点添加到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代码有点类似。

JS性能优化之文档碎片-document.createDocumentFragment相关推荐

  1. web前端分享:性能优化之文档碎片处理

    有不少同学在前端开发面试的时候会被问到性能优化的相关问题,做好优化是一件非常重要的事情,今天小千就来给大家介绍一下文档碎片的处理方式. 性能优化之文档碎片 一般情况下,在操作DOM结构的时候,经常会说 ...

  2. JQuery创建文档碎片

    (1)文档碎片可以提高DOM的操作性能.比如要插入一万个li标签,如果没有文档碎片,就必须插入一个然后页面渲染一次,插入完全部就要渲染一万次,太损耗性能.利用文档碎片,可以先把需要修改的全部放入文档碎 ...

  3. 有关文档碎片(document fragment)的用法

    通常情况下修改.删除或者增加DOM元素.更新DOM会导致浏览器重新绘制屏幕,也会导 致reflow,这样会带来巨大的开销.我们通常解决这的办法尽量减少更新DOM,这也就意 味着将DOM的改变分批处理, ...

  4. 我总结的js性能优化的小知识

    阅读目录 前言 避免全局查找 定时器 字符串连接 避免with语句 数字转换成字符串 浮点数转换成整型 各种类型转换 多个类型声明 插入迭代器 使用直接量 使用DocumentFragment优化多次 ...

  5. Node.js性能优化

    你不知道的Node.js性能优化 - 知乎 https://zhuanlan.zhihu.com/p/50055740 你不知道的Node.js性能优化 "当我第一次知道要写这篇文章的时候, ...

  6. html5在线显示word文档,JS实现获取word文档内容并输出显示到html页面示例

    本文实例讲述了js实现获取word文档内容并输出显示到html页面.分享给大家供大家参考,具体如下: title var w = new activexobject('word.application ...

  7. pdf.js在线查看(文档流/地址)

    pdf.js在线查看(文档流/地址) 工作中需要在移动端在线查看pdf文件,但由于pdf文件存放在第三方的服务器中,由于各种原因无法直接返回pdf文件地址给前台,后来确定返给前台是一个base64的流 ...

  8. 【办公常用软件有哪些】万彩办公大师教程丨扫描PDF转优化帮助文档

    关于万彩办公大师的扫描PDF转优化工具 扫描PDF转优化工具可以高效地优化扫描的PDF文档.这款工具不仅能使PDF文档中扫描的图像去扭斜,还能快速删除PDF中未使用的空白页.除此之外,可以将扫描的PD ...

  9. JS实现获取word文档内容并输出显示到html页面示例,和将页面数据写入txt文件

    JS实现获取word文档内容并输出显示到html页面示例 注意:这里使用了ActiveXObject组建,因此需要使用IE内核浏览器运行本代码. <!DOCTYPE html> <h ...

最新文章

  1. 大火的Apache Spark也有诸多不完美
  2. 设计模式之结构型(4)-桥接模式(Bridge)
  3. HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)
  4. java跳转html页面_springboot 2.0.8 跳转html页面
  5. pycharm关闭git
  6. 服务器配置能连多少个小程序,每个服务器能配置多少小程序
  7. 简单记录一下做的项目过程中踩过的坑
  8. linux里命令pkg-config工具的使用
  9. Spring动态代理的两种区别
  10. 人工神经网络概念梳理与实例演示
  11. Result Maps collection does not contain value for错误提示
  12. [计算机网络]网络层IP协议 选路算法
  13. 蝴蝶效应(Butterfly effect)[FROM 百度ZD]
  14. 微信公众号所有文章下载链接获取
  15. pa皮安级电流检测电路
  16. 求职经验丨应届毕业生,如何找到一份程序员工作呢?
  17. Spring------基于xml的DI (一)设值注入、构造注入
  18. 生产订单工艺路线修改
  19. Docker下安装MySQL
  20. 英语单词常用词根(二)

热门文章

  1. 图论--最短路-- Dijkstra模板(目前见到的最好用的)
  2. 使用jquery插件报错:TypeError:$.browser is undefined的解决方法
  3. mapreduce实现计数时未执行reduce方法(未实现统计功能)
  4. 玩转u-boot之【初探环境变量env/bootcmd/bootargs】
  5. [机器学习] LightGBM on Spark (MMLSpark) 使用完全手册
  6. __FUNCTION__, __FILE__, __LINE__ (原)
  7. 推荐華麗の真実的小说《The★Sakuray》
  8. 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
  9. python实现多表格合并_用python实现多个表格合并按字段去重
  10. 入门 | 初学者必读:解读14个深度学习关键词