浅析document.createDocumentFragment()与js效率


Posted in Javascript onJuly 08, 2013

document.createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。
这是我写的一个简单的测试页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>document.createDocumentFragment()测试页面</title>
</head>
<body>
<script type="text/javascript">
       var d1 = new Date();
       for(var i=0;i<1000;i++)
       {
              var op=document.createElement("P");
              var oText=document.createTextNode("test1");
              op.appendChild(oText);
              document.body.appendChild(op);
       }
       var d2 = new Date();
       document.write("方法一用时:" + (d2.getTime() - d1.getTime()) + "<br/>");
       //---+-----
       var d3 = new Date();
       var oFrag=document.createDocumentFragment();
       for(var i=0;i<1000;i++)
       {
              var op=document.createElement("P");
              var oText=document.createTextNode("test2");
              op.appendChild(oText);
              oFrag.appendChild(op);
       }
       document.body.appendChild(oFrag);
       //这段代码中
       var d4 = new Date();
       document.write("方法二用时:" + (d4.getTime() - d3.getTime()) + "<br/>");
</script>
</body>
</html>

一旦把节点添加到document.body(或其后的节点)中,页面就会立即反映出这个变化。对于第一小段程序,运行是没有任何问题的,但问题是它调用了十次document.body.appendChild(),每次要产生一次页面刷新,这样会产生很多页面碎片。而第二小段代码,document.body.appendChild()仅调用了一次,这意味着只需要进行一次页面的刷新,需要的时间显然会比前面的要少。
我用了三种浏览器测试上面的测试代码,大致得出的结果为:
IE7:
       方法一用时:140
       方法二用时:125
Firefox:
       方法一用时:66
       方法二用时:43
Chrome:
       方法一用时:35
       方法二用时:25
得出的结果还是和理论上的一致了。
Javascript 相关文章推荐
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
javascript拖拽效果延伸学习
Apr 04 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
jQuery插件autocomplete使用详解
Feb 04 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
Jan 31 Javascript
使用Typescript和ES模块发布Node模块的方法
May 25 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 #Javascript
解析使用JS 清空File控件的路径值
Jul 08 #Javascript
使用JS 清空File控件的路径值
Jul 08 #Javascript
JS 修改URL参数(实现代码)
Jul 08 #Javascript
解析javascript系统错误:-1072896658的解决办法
Jul 08 #Javascript
浅谈JavaScript之事件绑定
Jul 08 #Javascript
JS Map 和 List 的简单实现代码
Jul 08 #Javascript
You might like
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python登录注册验证功能实现
2018/06/18 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
《莫泊桑拜师》教学反思
2014/04/23 职场文书
天地会口号
2014/06/17 职场文书
中秋节寄语2015
2015/03/24 职场文书