通常情况下改动、删除或者添加DOM元素。

更新DOM会导致浏览器又一次绘制屏幕,也会导

致reflow,这样会带来巨大的开销。我们通常解决这的办法尽量降低更新DOM。这也就意

味着将DOM的改变分批处理。并在“活动”文档树之外运行这些更新。

当须要创建一个相对照较大的子树。应该在子树全然创建之后再将子树加入到DOM树中。

这时採用文档碎片技术来容纳全部的节点。

//反样例

//在创建时马上加入节点

var p,t;

p = document.createElement('p');
t = document.createTextNode('first p');
p.appendChild(t);
document.body.appendChild(p); p = document.createElement('p');
t = document.createTextNode('second p');
p.appendChild(t);
document.body.appendChild(p);

创建文档碎片来离线升级节点信息是更好的做法。当将文档碎片加入到DOM树时,并非

将碎片加入到DOM树中,而是将文档碎片的内容加入进DOM树中。

文档碎片是一种非常好的

方法,能够用来封装很多节点信息,甚至这些节点并没有合适的父节点。

例如以下演示样例:

var p,t,frag;
frag = document.createDocumentFragment();
p = document.createElement('p');
t = document.createTextNode('first p');
p.appendChild(t);
frag.appendChild(p); p = document.createElement('p');
t = document.createTextNode('second p');
p.appendChild(t);
frag.appendChild(p); document.body.appendChild(frag);

在上面样例中,活动的文档只更新了一次并触发一次屏幕重绘。而第一个样例中,每

运行一个段落都会重绘一次。

在为DOM树加入新节点时文档碎片是非常实用的。但在更新DOM现有部分时。仍然能够批处理提交改动。

详细的方法是为须要改动的子树的根节点建立一个克隆镜像,然后对克隆镜像做全部的改动操作,在完毕操作后用克隆镜像替换原来的子树。

var old = document.getElementById('result'),
clone = old.cloneNode(true);
old.parentNode.replaceChild(clone,old);

有关文档碎片(document fragment)的使用方法的更多相关文章

  1. JS性能优化之创建文档碎片(document.createDocumentFragment)

    讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么.         在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于少量的更新, ...

  2. 【js基础修炼之路】--创建文档碎片document.createDocumentFragment()

          讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么.         在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于 ...

  3. document文档碎片

    var arrText = ["1","2","3","4","5","6",& ...

  4. 文档碎片DocumentFragment

    文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...

  5. javascript创建文档碎片节点

    在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...

  6. createDocumentFragment() 创建文档碎片节点

    var aqiData = [ ["北京", 90], ["上海", 50], ["福州", 10], ["广州", 5 ...

  7. javascript之文档碎片,文档碎片在理论上可以提高DOM操作的执行效率

    刚来到这里,趁着还没有忘记,来记录一下,昨晚学习的一个知识点——JavaScript中的文档碎片. 一.对文档碎片的基本认识 文档碎片可以提高DOM操作性能(理论上,注意!!理论上的) 文档碎片原理 ...

  8. 文档碎片及xml讲解

    1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...

  9. js文档碎片

    //文档碎片:类似一个临时的文档,要所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率 var d1 = new Date(); //创建十个段落,常规的方式 ; i < ; ...

随机推荐

  1. makepy

    文件连接: https://files.cnblogs.com/files/mophy/%E7%99%BB%E5%BD%95%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90.7 ...

  2. h5-9 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. BZOJ 2140 Tarjan

    思路: 跟POJ有一道时限挺长的题一模一样  哦 POJ 1904 题解可以看这个(捂脸) http://blog.csdn.net/qq_31785871/article/details/52963 ...

  4. Entity Framework 的懒加载、预先加载、显示加载

    1.新建两个实体,一个班级有多个学生 public class Student { public int StudentId { get; set; } public string StudentNa ...

  5. javascript中对象两种创建方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Windows负载机JVM 远程监控Linux服务器下tomcat

    基本是跟着网上的操作进行的,除了遇到一个Local host name unknown的问题: 一.Linux服务器操作部分 服务器地址:10.64.111.68 首先配置JMX: 1.找到jdk目录 ...

  7. mvc关于pots请求 哪个函数 出现bug研究

    这样能请求home下的updateA函数 这样能请求home下的update函数,不能请求updateA函数

  8. 企业级任务调度框架Quartz(8) 线程在Quartz里的意义(2)

    前序:      做为企业里的任务调度框架,出现同一时间点同时运行两个任务,或者两个任务因为开始的执行时间和执行时间的长短,很有可能出现任务并发执行的情况:因为Quartz的实现是采用java编程,那 ...

  9. Zabbix4.0 Web管理界面中文乱码解决方法(转)

    Zabbix安装好之后,监控图形页面出现字符集乱码 解决方法:1.复制本地电脑C:\Windows\Fonts\simkai.ttf(楷体)上传到zabbix服务器网站目录的fonts目录下 2.za ...

  10. ZJOI2015 幻想乡战略游戏 动态点分治_树链剖分_未调完

    Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...