今天在看vue源码解析时候发现一个api没有见过,一查是原生的,赶紧补漏。

DocumentFragments 是DOM节点。它们不是主DOM树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到DOM树。在DOM树中,文档片段被其所有的子元素所代替。

因为文档片段存在于内存中,并不在DOM树中,所以将子元素插入到文档片段时不会引起页面回流(reflow)(对元素位置和几何上的计算)。因此,使用文档片段document fragments 通常会起到优化性能的作用(better performance)。

比如动态添加多个文本节点或者元素节点时,调用多次document.body.append(),每次都要刷新页面一次。效率也就大打折扣了,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可。

他支持以下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段测试程序:

var d1 = new Date();

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

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

var p = document_createElement_x_x_x("p");

var oTxt = document_createTextNode("段落" + i);

p.a(oTxt);

document.body.a(p);

}

var d2 = new Date();

document.write("第一次创建需要的时间:"+(d2.getTime()-d1.getTime()));

//使用了createDocumentFragment()的程序

var d3 = new Date();

var pFragment = document_createDocumentFragment();

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

var p = document_createElement_x_x_x("p");

var oTxt = document_createTextNode("段落" + i);

p.a(oTxt);

pFragment.a(p);

}

document.body.a(pFragment);

var d4 = new Date();

document.write("第2次创建需要的时间:"+(d4.getTime()-d3.getTime()));

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

本文部分内容摘自《莫尘的博客》,链接地址:http://blog.sina.com.cn/s/blog_667a8c2f010113zw.html

最新文章

  1. IHttpModule
  2. 【Python自动化运维之路Day9】Socket
  3. 移动WEB 性能优化方案
  4. Scrum Meeting---Four(2015-10-28)
  5. AudioPlayer.js,一个响应式且支持触摸操作的jquery音频插件
  6. jquery里的宽度详解
  7. HTTP 缓存控制总结
  8. .net(C#)访问Oracle数据库的几种免安装组件的对比(转)
  9. js中取session的值
  10. leetcode day6 -- String to Integer (atoi) &amp;amp;&amp;amp; Best Time to Buy and Sell Stock I II III
  11. C++中的基本数据类型
  12. 【转】Spark运行过程
  13. 【Hdu2089】不要62(数位DP)
  14. SharePoint 开发TimerJob 介绍
  15. sklearn了解一下
  16. Activity、Window、View三者之间的联系
  17. Go语言打造以太坊智能合约测试框架(level1)
  18. sql server 中用于排名的三个函数 row_number() ,RANK() 和 DENSE_RANK()
  19. oracle_创建表空间_临时表空间_修改表空间_以及自增长
  20. Solr版本问题分析

热门文章

  1. [51nod1503]猪和回文 DP
  2. BZOJ_DAY6???
  3. vue 时间戳转 YYYY-MM-DD h:m:s
  4. Spring源码解析-AOP简单分析
  5. myisam_sort_buffer_size vs sort_buffer_size
  6. Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)
  7. ng父组件调用子组件的方法
  8. 解决es6中webstrom不支持import的一个简单方法
  9. js操作div的显隐
  10. OWNER:Java配置文件解决方案 使用简介