createDocumentFragment作用是什么? 快速响应,提高效率,提升用户体验。

调用document.body.append(),每调用一次都要刷新页面 一次。效率就低了。

用document.createFragment()创建一个文档碎片,把所有的新节点附加在其上,最后把文档碎片的内容一次性添加到document中,只需要一次页面刷新即可。

document.createFragment()支持DOM2的方法:

a, cloneNode, hasAttributes, hasChildNodes, insertBefore, normalize, removeChild, replaceChild.

也支持DOM2的属性:

attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling, textContent.

下面2段代码测试一下效率。

一千次修改DOM加一千个段落

var d1 = new Date();

//创建一千个段落,常规的方式

for(var i = 0 ; i < 1000; i ++) {

    var p = document.createElement("p");

    var oTxt = document.createTextNode("段落" + i);

    p.append(oTxt);

    document.body.append(p);

}

var d2 = new Date();

console.log("第一次创建需要的时间:"+(d2.getTime()-d1.getTime()));
//第一次创建需要的时间:6
//使用了createDocumentFragment()的程序

var d3 = new Date();

var pFragment = document.createDocumentFragment();

for(var i = 0 ; i < 1000; i ++) {

    var p = document.createElement("p");

    var oTxt = document.createTextNode("段落" + i);

    p.append(oTxt);

    pFragment.append(p);

}

document.body.append(pFragment);

var d4 = new Date();

console.log("第2次创建需要的时间:"+(d4.getTime()-d3.getTime()));
//第2次创建需要的时间:3

我在chrome下运行,效率差了一半。

参考:

http://blog.sina.com.cn/s/blog_667a8c2f010113zw.html

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4904929.html有问题欢迎与我讨论,共同进步。

最新文章

  1. I2C子系统之驱动SSD1306 OLED
  2. node-mysql 在4.2.0的时候遇到的错误
  3. const,static,extern简介
  4. 百度地图API 定位一直4.9E-324
  5. VC 单文档视图分割
  6. 二叉查找树的Java实现
  7. C# 通过消息捕获处理窗体最大化/最小化
  8. CSS_03_01_CSS类选择器
  9. Axis2在Web项目中整合Spring
  10. 实现带查询功能的Combox控件
  11. 九度OJ 1104 整除问题
  12. 关于python的开发工具——Canopy
  13. 在commons-lang3包中StringUtils类的ordinalIndexOf中有一个错误
  14. Android SDK下载失败的解决方法
  15. vmware 中安装Ghost XP 版本心得
  16. 【Python026--字典内键方法】
  17. Shell编程之数组使用
  18. git如何获取用户名和邮箱
  19. UVA-550
  20. hdu 4491 Windmill Animation

热门文章

  1. struts2框架学习之第三天
  2. 关于flock
  3. 关于iwinfo的调试
  4. Mybatis--02
  5. ansible笔记(1)在centos中安装ansible
  6. UniversalImageLoader(异步加载大量图片)
  7. POJ 3723
  8. elasticsearch索引自动清理
  9. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)
  10. dict-test