通常情况下修改、删除或者增加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. web前端分享:性能优化之文档碎片处理

    有不少同学在前端开发面试的时候会被问到性能优化的相关问题,做好优化是一件非常重要的事情,今天小千就来给大家介绍一下文档碎片的处理方式. 性能优化之文档碎片 一般情况下,在操作DOM结构的时候,经常会说 ...

  3. JQuery创建文档碎片

    (1)文档碎片可以提高DOM的操作性能.比如要插入一万个li标签,如果没有文档碎片,就必须插入一个然后页面渲染一次,插入完全部就要渲染一万次,太损耗性能.利用文档碎片,可以先把需要修改的全部放入文档碎 ...

  4. linux如何右键新建文件夹,在Ubuntu 18.04右键菜单中增加新文档(New Document)及其他类型选项...

    本文教你在Ubuntu 18.04操作系统下使用命令操作在右键菜单中增加"新文档(New Document)"选项,包括为不同文件类型增加右键菜单选项的方法.起因是当我尝试创建一个 ...

  5. Sharepoint学习笔记—ECM系列--文档集(Document Set)的实现

    文档集是 SharePoint Server 2010 中的一项新功能,它使组织能够管理单个可交付文档或工作产品(可包含多个文档或文件).文档集是特殊类型的文件夹,它合并了唯一的文档集属性以及文件夹和 ...

  6. docx_demos(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)

    """ docx_demos.py(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)使用:一.创建 ...

  7. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  8. 360 自动打开word_Word文档高手的组合键用法,你知道几个?

    软件说明:Word2016版本 相信大家都知道在Excel工作表中有很多组合键.快捷键的用法,可以帮助我们节省很多的时间.其实,Word文档中也是同样有很多组合键的用法非常棒! 创建书签:Ctrl+S ...

  9. 复合二进制文档(Compound Document File)解析

    复合文档(Compound Document)是一种不仅包含文本而且包括图形.电子表格数据.声音.视频图象以及其它信息的文档.可以把复合文档想象成一个所有者,它装着文本.图形以及多媒体信息如声音和图象 ...

最新文章

  1. java编写一个通讯录_java写的通讯录(小玩意)
  2. 百度大脑金秋九月CV盛典,人脸识别新产品及伙伴计划发布会压轴开启
  3. Nature Neuroscience|群际冲突的脑间同步机制
  4. 刚发现 emacs的新的go-mode
  5. Android开发之自定义TabHost文字及背景(源代码分享)
  6. 13.MapReduce第3部分(编程实践WordCount)
  7. C语言百度翻译API的使用,c语言怎么翻译? 程序怎么运行?
  8. outlook工具栏显示_Outlook 2007中的待办事项栏仅显示当前任务
  9. 先进的ASP.NET开源工作流快速开发框架 - RoadFlow
  10. Mac OSX 平台安装 MongoDB
  11. android 如何判断是否有网络,Android中判断网络连接是否可用的方法总结
  12. 将A3排版的PDF内容转成A4纸张
  13. 使用Windows ADK 创建以U盘引导启动的Windows PE
  14. 百度通用文字识别离线SDK部署(c#)
  15. Centos 7.9挂载群晖NAS
  16. Python 之 pygame 学习(入门知识)
  17. 安利一个超好用的录屏工具,收藏必备! - 网课、游戏、录音等免费录制
  18. 找工作收到多个 Offer,我该怎么办?
  19. [zz]64bitnbsp;ubuntunbsp;安装32bit软件
  20. display: flex以及flex-direction,justify-content,align-items

热门文章

  1. ajax漏洞 console_在实战中可能碰到的几种ajax请求方法详解
  2. windows镜像_什么是windows镜像?什么是Ghost?它们有什么优缺点?
  3. linux权限介绍,Linux的权限介绍
  4. HTML中表单能嵌套吗,你可以嵌套的HTML表单?
  5. php远程读取几行文件,PHP读取远程文件的三种方法
  6. 携带token的ajax请求方法封装
  7. 「雕爷学编程」Arduino动手做(38)——joystick双轴摇杆模块
  8. Spring中注解注入bean和配置文件注入bean
  9. mysql中生成列与JSON类型的索引
  10. Python之数据类型总结