`
wyzxzws
  • 浏览: 391809 次
  • 性别: Icon_minigender_1
  • 来自: dazhou
社区版块
存档分类
最新评论

批量修改DOM

DOM 
阅读更多

当你需要对DOM元素进行一系列操作时,可以通过一下步骤来减少重绘和重排的次数:

  1. 使元素脱离文档流。
  2. 对其应用多重改变。
  3. 把元素带回文档中。

该过程会触发两次重排---第一步和第三步。如果你忽略这两个步骤,那么在第二部所产生的人和修改都会触发一次重排。

有三种基本方法可以使DOM脱离文档:

  1. 隐藏元素,应用修改,重新显示。
  2. 使用文档片段(document fragment)在当前DOM之外构建一个子树,再把它拷贝回文档。
  3. 将原始元素拷贝到一个脱离文档的节点中,修改副本,完成后再替换原始元素。
var data = [
   {
     "name":"name1"
     "url":"url1"
   },
   {
    "name":"name2"
     "url":"url2"
   }
], appendToElement = 要改变的节点对象;

function appendDataToElement(appendToElement, data) {
   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.createElment("li");
     li.appendChild(a);
     appendToElment.appendChild("li");
   }
}
 
// 隐藏元素,应用修改,重新显示

var ul = document.getElementById("mylist");
ul.style.display = "none";
appendDataToElment(ul, data);
ul.style.display = "block";

 

//使用文档片段(document fragment)在当前DOM之外构建一个子树,再把它拷//贝回文档。
var fragment = document.createDocumentFragment();
appendDataToElment(fragment, data);
document.getElementById("mylist").appendChild(fragment);
 
//将原始元素拷贝到一个脱离文档的节点中,修改副本,完成后再替换原始元素。
var old = document.getElementById("mylist");
var clone = old.cloneNode(true);
appendDataToElement(clone, data);
old.parentNode.relaceChild(clone, old);

  注:推荐尽可能地使用文档片断(第二个方案),因为它们所产生的DOM遍历和重排次数最少。

 

 

 

 

分享到:
评论

相关推荐

    javascriptDOM

    10. **性能优化**:理解DOM操作可能会引起重绘和回流,了解如何最小化这些操作对性能的影响,比如批量修改DOM、使用`createDocumentFragment()`等。 在JavaScript和CSS的学习中,两者是相互关联的。CSS用于定义网页...

    JavaScript DOM编程艺术源代码

    7. **DOM操作性能优化**:了解如何批量修改DOM,避免不必要的重绘和回流,以及使用`innerHTML`与`createDocumentFragment()`的差异。 8. **DOM2级与DOM3级API**:区分不同级别的DOM标准,如DOM2级引入了样式和事件...

    html批量修改

    1. **文本替换**:最基础的批量修改是查找并替换特定的文本内容。例如,可能需要更改所有页面的版权信息或者统一更新某个链接地址。通过编程语言如Python或批处理脚本可以实现这一功能。Python的`os`库用于遍历文件...

    icaro智能和高效的JavaScript对象观察器适合批量DOM更新1kb

    在JavaScript开发中,尤其是涉及到DOM更新时,icaro提供了一种优化批量更新的方法,避免了频繁操作DOM导致的性能损失。 **JavaScript对象观察器** 在JavaScript中,对象是动态的数据结构,其属性可以随时添加、...

    DOM经典教程_web前端必备

    - 使用文档片段(DocumentFragment):批量修改DOM时,先在内存中操作文档片段,最后一次性插入DOM树,减少重绘次数。 - 使用事件委托:利用事件冒泡,将事件处理函数绑定到共同的父元素,减少事件监听器的数量。 ...

    JavaScriptDOM编程艺术及源代码

    - 使用文档片段:批量修改DOM时,使用document.createDocumentFragment提升性能。 8. **实践应用** - 表单处理:利用DOM操作实现表单验证和提交。 - 模态框和滑动菜单:使用JavaScript和DOM实现常见的前端交互...

    渲染篇 3:对症下药——DOM 优化原理与基本实践(1).md

    - **批量修改DOM**:在操作DOM时,可以采用“先集中修改,再一次性更新到DOM”的方法,比如使用`documentFragment`来构建DOM结构后再插入到文档中。此外,利用现代前端框架提供的虚拟DOM(Virtual DOM)技术也是减少...

    JavaScript 高效运行代码分析

    2. **减少回流次数**:批量修改DOM元素,而不是逐个修改。 3. **最小化回流影响**:对不可见元素进行修改,或在修改后设置可见性,以减少对页面布局的影响。 4. **测量大小**:使用 `getComputedStyle` 或 `...

    Javascript执行效率小结.pdf

    3. 集中修改:批量修改DOM元素,比如在一个数组中收集修改操作,然后一次性执行。 4. 使用事件委托:将事件监听器绑定到父元素,减少事件监听器的数量,减少DOM遍历。 5. 使用CSS3动画:尽可能利用硬件加速,如CSS3...

    WEB前端工程师Web前端性能优化经验分享

    优化策略包括缓存DOM查询结果,减少循环中的DOM操作,尽量批量修改DOM,以及避免在事件处理中进行大量的DOM操作。在IE中,使用:hover可能导致响应速度降低,需谨慎使用。 4. 使用JSON进行数据交换 JSON是一种轻量级...

    批量修改pom 的版本依赖

    `批量修改pom.xml的版本依赖`就是针对这个问题的一种解决方案,它旨在提高开发效率并确保整个项目的一致性。POM(Project Object Model)是Maven项目的核心配置文件,用于定义项目构建、依赖管理和插件配置等信息。...

    JavaScript的时间消耗共9页.pdf.zip

    批量修改DOM或利用虚拟DOM技术(如React)可以减少实际DOM更新次数,从而提升性能。 最后,代码的加载和解析也是影响时间的因素。模块化工具(如CommonJS、ES6模块)和懒加载策略能够延迟非关键资源的加载,改善...

    HTTP基础8张脑图.zip

    脑图可能提供了几种策略,如使用CSS3的硬件加速、批量修改DOM、利用CSS伪元素等来减少对DOM的操作。 6. **同步异步编程**: HTTP请求通常涉及异步处理,因为它们不阻塞主线程。这部分可能讲解了同步和异步的区别,...

    python批量修改xml属性的实现方式

    ### Python批量修改XML属性的实现方法 在处理大量XML文件时,经常需要批量修改其中的某些属性或元素值。本文将详细介绍如何使用Python批量修改XML属性,并通过具体示例进行说明。 #### 一、理解XML文件结构 XML...

    JavaScript 源代码大全(常用、实用、特效)

    1. **减少DOM操作**:批量修改DOM,避免频繁触发重绘和回流。 2. **使用事件委托**:在父元素上绑定事件,减少事件监听器数量。 3. **缓存计算结果**:对于复杂计算,可以将结果存储起来,避免重复计算。 这份...

    JAVASCRIPT写的连连看

    因此,合理的DOM操作策略(如批量修改DOM而不是逐个修改)、避免阻塞主线程的长任务以及利用事件委托等优化手段都是必要的。 6. **用户体验**:良好的交互设计和反馈机制,如音效、动画效果,可以提升游戏体验。...

    2017前端面试题答案.docx

    - **优化DOM操作**:使用`innerHTML`代替直接DOM操作,减少DOM操作次数,批量修改DOM。 - **CSS优化**:大量样式设置时使用className,避免CSS表达式。 - **预加载资源**:预加载图片,CSS放头部,JS放底部,添加...

    XMLDOM.rar_PHP DOM_数据批量处理

    `DOMElement`类提供了修改元素属性的方法,如`setAttribute()`和`nodeValue`,可以用来改变元素的值或属性。 在描述中提到的“数据批量处理”可能涉及到循环遍历XML文件中的多个节点,执行相同或不同的操作。这通常...

    提高AJAX客户端响应速度

    10. **减少DOM操作**:批量修改DOM元素,而不是每次修改一个,以减少浏览器重绘和回流。 **标签解析** - **源码**:可能涉及AJAX实现的具体代码示例,以及如何通过查看和分析源码来优化性能。 - **工具**:可能...

Global site tag (gtag.js) - Google Analytics