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自定义事件代码说明
Jan 31 Javascript
table行随鼠标移动变色示例
May 07 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
javascript变量声明实例分析
Apr 25 Javascript
JS判断图片是否加载完成方法汇总(最新版)
May 13 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
Nov 11 Javascript
JS回调函数 callback的理解与使用案例分析
Sep 09 Javascript
canvas绘制折线路径动画实现
May 12 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
详解JS面向对象编程
2016/01/24 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
this.$toast() 了解一下?
2019/04/18 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python实现rsa加密实例详解
2017/07/19 Python
Python语言描述最大连续子序列和
2017/12/05 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
公司委托书格式范文
2014/04/04 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
推荐信格式要求
2014/05/09 职场文书
庆七一宣传标语
2014/10/08 职场文书
SQL基础的查询语句
2021/11/11 MySQL
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
Golang gRPC HTTP协议转换示例
2022/06/16 Golang