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 相关文章推荐
Javascript 函数对象的多重身份
Jun 28 Javascript
用js小类库获取浏览器的高度和宽度信息
Jan 15 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
May 23 Javascript
jQuery $.get 的妙用 访问本地文本文件
Jul 12 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
JS更改select内option属性的方法
Oct 14 Javascript
JavaScript中匿名函数的用法及优缺点详解
Jun 01 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
在js中做数字字符串补0(js补零)
Mar 25 Javascript
详解angularjs实现echart图表效果最简洁教程
Nov 29 Javascript
layui实现数据分页功能
Jul 27 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
Aug 28 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 日常开发小技巧
2009/09/23 PHP
浅谈php自定义错误日志
2015/02/13 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
prototype 学习笔记整理
2009/07/17 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
BootStrap中
2016/12/10 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
魅力教师事迹材料
2014/01/10 职场文书
创先争优活动方案
2014/02/12 职场文书
师范生见习报告范文
2014/11/03 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP