有关文档碎片(document fragment)的使用方法
通常情况下改动、删除或者添加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)的使用方法的更多相关文章
- JS性能优化之创建文档碎片(document.createDocumentFragment)
讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么. 在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于少量的更新, ...
- 【js基础修炼之路】--创建文档碎片document.createDocumentFragment()
讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么. 在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于 ...
- document文档碎片
var arrText = ["1","2","3","4","5","6",& ...
- 文档碎片DocumentFragment
文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...
- javascript创建文档碎片节点
在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...
- createDocumentFragment() 创建文档碎片节点
var aqiData = [ ["北京", 90], ["上海", 50], ["福州", 10], ["广州", 5 ...
- javascript之文档碎片,文档碎片在理论上可以提高DOM操作的执行效率
刚来到这里,趁着还没有忘记,来记录一下,昨晚学习的一个知识点——JavaScript中的文档碎片. 一.对文档碎片的基本认识 文档碎片可以提高DOM操作性能(理论上,注意!!理论上的) 文档碎片原理 ...
- 文档碎片及xml讲解
1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...
- js文档碎片
//文档碎片:类似一个临时的文档,要所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率 var d1 = new Date(); //创建十个段落,常规的方式 ; i < ; ...
随机推荐
- 详解Dialog(二)——有关列表的构建
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言:这段时间真是忙啊忙啊忙,元旦三天假加了两天班,已经连续六周只放一天了,天天加班到十点多,真是有一口血吐在屏幕上的感觉了,博 ...
- 利用SharedPreferences完成记住账号密码的功能
利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...
- DNS Tunneling及相关实现——总之,你发起攻击都需要一个DNS server,下载一些工具作为client发起数据,server收集数据并响应
摘自:http://www.freebuf.com/sectool/112076.html DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信.因为在我们的网络 ...
- P1290sk抓螃蟹
背景 sk,zdq想在hzy生日之际送hzy几只螃蟹吃... 描述 现有n只螃蟹,每个在一个二维作标上,保证没有任何两个螃蟹重合.sk伸手抓螃蟹 了,他怕螃蟹的攻击,当他捉一只螃蟹时,其他螃蟹都朝这只 ...
- nyoj--635--Oh, my goddess(dfs)
Oh, my goddess 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Shining Knight is the embodiment of justice an ...
- c语言system()介绍
2013-09-0916:06:02 1. 头文件: #include <stdlib.h> 2. 定义函数: int system(const char * string); 3. 函数 ...
- hibernate dao 公共方法
package com.dao.impl; import java.lang.reflect.ParameterizedType; import java.util.Collection; impor ...
- 移动端布局 rem,和px
1.rem布局,根据屏幕来计算rem,也就是意义上的适应屏幕,但是一些字体大小转换和计算有些复杂. // rem 布局重定义 (function(){ $('html').css('font-size ...
- OpenCV的Python接口
Python教程系列:http://blog.csdn.net/sunny2038/article/details/9057415 与C++的不同之处:http://developer.51cto.c ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动
http://www.cnblogs.com/wuhuacong/p/3841338.html 为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此 ...