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


Posted in Javascript onJuly 13, 2010

在浏览器中,我们一旦把节点添加到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条),如果像上面的代码一样,逐条添加节点,这个过程就可能会十分缓慢。
为了解决这个问题,我们可以引入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.body.appendChild(oFragmeng);//最后一次性添加到document中

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

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

Javascript 相关文章推荐
利用JS自动打开页面上链接的实现代码
Sep 25 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
CheckBoxList多选样式jquery、C#获取选择项
Sep 06 Javascript
JavaScript操作XML文件之XML读取方法
Jun 09 Javascript
JavaScript AOP编程实例
Jun 16 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
Jan 09 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
node.js 如何监视文件变化
Sep 01 Javascript
vue实现可移动的悬浮按钮
Mar 04 Vue.js
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 #Javascript
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 #Javascript
javascript中字符串拼接需注意的问题
Jul 13 #Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 #Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 #Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 #Javascript
不同浏览器的怪癖小结
Jul 11 #Javascript
You might like
PHP添加MySQL数据记录代码
2008/06/07 PHP
php cli换行示例
2014/04/22 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
详解JS预解析原理
2020/06/16 Javascript
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python分析学校四六级过关情况
2017/11/22 Python
python实现神经网络感知器算法
2017/12/20 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python字符串对象实现原理详解
2019/07/01 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
校本教研工作方案
2014/01/14 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
开业庆典主持词
2014/03/21 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫
Android自定义双向滑动控件
2022/04/19 Java/Android