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 jQuery插件练习
Dec 24 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
Apr 19 Javascript
javascript中的数字与字符串相加实例分析
Aug 14 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
Dec 04 Javascript
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 Javascript
vue-cli 引入、配置axios的方法
May 08 Javascript
解决Vue打包后访问图片/图标不显示的问题
Jul 25 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP 字符串 小常识
2009/06/05 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
再探JavaScript作用域
2014/09/24 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
JavaScript数值类型知识汇总
2019/11/17 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python实现excel转sqlite的方法
2017/07/17 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
银行贷款收入证明
2014/10/17 职场文书
使用pytorch实现线性回归
2021/04/11 Python
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
利用Python实现模拟登录知乎
2022/05/25 Python