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 相关文章推荐
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
js仿QQ邮箱收件人选择与搜索功能
Feb 10 Javascript
详解Angular的8个主要构造块
Jun 20 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
Jun 26 jQuery
关于react-router的几种配置方式详解
Jul 24 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
webpack4 从零学习常用配置(小结)
May 28 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
JavaScript交换两个变量方法实例
Nov 25 Javascript
jQuery实现二级导航菜单的示例
Sep 30 jQuery
JavaScript字符串转数字的简单实现方法
Nov 27 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 中执行系统外部命令
2006/10/09 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP中list方法用法示例
2016/12/01 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
Python使用一行代码获取上个月是几月
2018/08/30 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
简单了解如何封装自己的Python包
2020/07/08 Python
Python 如何查找特定类型文件
2020/08/17 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
学生出入校管理制度
2014/01/16 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技