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 相关文章推荐
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
避免 showModalDialog 弹出新窗体的原因分析
May 31 Javascript
jQuery 开发者应该注意的9个错误
May 03 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
socket.io实现在线群聊功能
Apr 07 Javascript
webpack 4.0.0-beta.0版本新特性介绍
Feb 10 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
react实现复选框全选和反选组件效果
Aug 25 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
通过继承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的图形函数中显示汉字
2006/10/09 PHP
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
python缩进区别分析
2014/02/15 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python从零开始创建区块链
2018/03/06 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
网络安全类面试题
2015/08/01 面试题
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
安全生产检讨书
2014/01/21 职场文书
学习雷锋活动总结
2014/04/29 职场文书
经营目标责任书
2015/05/08 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
nginx部署多前端项目的几种方法
2021/05/25 Servers
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server