批量修改DOM的性能改进
来源:互联网 发布:挖财记账理财软件 编辑:程序博客网 时间:2024/05/22 14:20
批量修改DOM通过这些步骤来减少重绘和重排的次数1、使元素脱离文档流2、对其应用多重改变3、把元素带回文档这个过程只有第一、三会触发重排,如果忽略这两个步骤,那么第二步所产生的任何修改都会触发一次重排。有三种方法使Dom脱离文档1、隐藏元素,应用修改,重新显示2、使用文档片段在当前DOM之外构建一个子树,再把它拷贝回文档3、将原始原始拷贝到一个脱离文档的节点中,修改副本,完成后再替换原始元素
<html><head><script type="text/javascript">function appendDataToElement(ul) {var data =[{"name" : "li1","url" : "www.litest1"},{"name" : "li2","url" : "www.litest2"}];var a,li;for(var i=0,max= data.length;i<max;i++){a = document.createElement('a');a.href = data[i].url;a.appendChild(document.createTextNode(data[i].name));li =document.createElement('li');li.appendChild(a);ul.appendChild(li);}}function test1() {var ul =document.getElementById("mylist");appendDataToElement(ul);}</script><title>Insert title here</title></head><body><ul id="mylist"><li><a href="www.q.com">q</a></li><li><a href="www.b.com">b</a></li></ul><form action=""><input type="button" onclick="test1()" value="test"></form></body></html>
关于重排,这种方法在更新列表的内容的时候不用担心重排问题但是当data数组的每一个新条目被附加到当前Dom树时会导致重排
第二种方法:
var ul =document.getElementById("mylist");ul.style.display ='none';appendDataToElement(ul);ul.style.display ='block';第三种方法:
var fragment = document.createDocumentFragment();appendDataToElement(fragment);document.getElementById("mylist").appendChild(fragment);该方法好处是当你附加一个片段到节点中时,实际上被添加的是该片段的子节点,,而不是片段本身,上面的代码只触发一次重排,而且只访问了一次实时的DOM
第四种方法:
var old = document.getElementById("mylist");var clone = old.cloneNode(true);appendDataToElement(clone);old.parentNode.replaceChild(clone, old);
推荐使用文档片段
- 批量修改DOM的性能改进
- 如何优化批量修改DOM的操作
- 隔振器性能的改进
- 用vc++重写的文件扩展名批量修改工具(改进了一下)
- Js Dom 第六章 图片库的改进
- 改进托管代码的性能
- SSIS----改进数据流的性能
- 转码性能的改进
- Sqlserver 批量提交的方案改进!
- 批量导入的修改
- 最小化重绘和重排之批量修改DOM
- 修改FILE缓冲区大小,改进写日志性能
- mysql的批量新增和批量修改
- DOM的性能问题、优化
- 常用DOM元素的修改
- 改进 ASP 的字符串处理性能
- 怎样改进数据库的查询性能?
- 关注性能: 改进您的开发过程
- Gartner公布2012新兴技术炒作周期报告:“引爆点”技术引领未来
- Symbian 证书认证(PID) Express Signed CID签名 流程
- XML语法规则
- 求两个整数的正差值
- 华容道算法和使用广度搜索的一些单人游戏求解框架
- 批量修改DOM的性能改进
- C++我来了
- magento custom api configuration
- 软件测试基础知识
- :第5周任务3-摄氏温度值转华氏温度
- * 正差值
- CentOs下编译安装erlang
- HDU 1402 大数相乘 解决超时
- HDU 1051