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 相关文章推荐
jquery控制listbox中项的移动并排序
Nov 12 Javascript
jquery提示 &quot;object expected&quot;的解决方法
Dec 13 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
angular.js分页代码的实例
Jul 27 Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 Javascript
小程序实现投票进度条
Nov 20 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 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为php增加openssl模块的方法
2011/06/14 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php实现学生管理系统
2020/03/21 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
动手学习无线电
2021/03/10 无线电
jquery.validate的使用说明介绍
2013/11/12 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
简单了解Python生成器是什么
2019/07/02 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python SocketServer源码深入解读
2019/09/17 Python
python实现淘宝购物系统
2019/10/25 Python
Python 内存管理机制全面分析
2021/01/16 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
普通大学毕业生自荐信
2013/11/04 职场文书
房屋租赁意向书
2014/04/01 职场文书
小学生操行评语大全
2014/04/22 职场文书
怀念母亲教学反思
2014/04/28 职场文书
社区元宵节活动总结
2015/02/06 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis