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是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
Mar 04 Javascript
Javascript表格翻页效果的具体实现
Oct 05 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
jQuery简单实现禁用右键菜单
Mar 10 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP中的替代语法简介
2014/08/22 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
详解Python的Lambda函数与排序
2016/10/25 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
一份比较全的PHP面试题
2016/07/29 面试题
应用电子技术专业个人求职信
2013/09/21 职场文书
年终总结会主持词
2014/03/25 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
个人年底工作总结
2015/03/10 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
SQLServer之常用函数总结详解
2021/08/30 SQL Server
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android