`
jyren_Rachel
  • 浏览: 5163 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Dom节点操作的性能优化

 
阅读更多
  1. 批量增加Dom 尽量使用修改innerHTML的方式而不是用appendChild的方式; 因为使用innerHTML开销更小,速度更快,同时也更加内存安全. 
    有 一点需要注意的是,用innerHTML方式添加时,一定不要在循环中使用 innerHTML += 的方式添加,这样反而会使速度减慢; 而是应该中间用array缓存起来,循环结束后调用 xx.innerHTML = array.join(‘’);的方式,或者至少保存到string中再插到innerHTML中. 
    针对用户列表一块采用这种方式优化后,加载速度提升一倍.
  2. 单个增加Dom 这里是指要将新节点加载到一个内容不断变化的节点的情形,对于内容稳定的节点来说,随便怎么加都没有问题. 但是对于有动态内容的节点来说,为其添加子节点尽量使用 dom append的方式. 
    这是因为,dom append不会影响到其他的节点;而如果修改innerHTML属性的话,该父节点的所有子节点都会从dom树中剥离,再根据新的innerHTML值来重绘子节点dom树;所有注册到原来子节点的事件也会失效. 
    综上,如果在一个有动态内容的节点上 出现了 innerHTML += 的代码,就该考虑是否有问题了.
  3. 创建Dom节点 用 createElement方式创建一个dom节点,有一个很重要的细节: 在执行完createElement代码之后,应该马上append到dom树中; 否则,如果在将这个孤立节点加载到dom树之前所做的赋值它的属性和innerHTML的操作都会引发该dom片段内存无法回收的问题. 这个不起眼细节,一旦遇到大量dom增删操作,就会引发内存的灾难.
  4. 创建事件监听 删除dom节点之前,一定要删除注册在该节点上的事件,不管是用observe方式还是用attachEvent方式注册的事件,否则将会产生无法回收的内存. 
    另,在removeChild和innerHTML=’’二者之间,尽量选择后者. 因为在sIEve(内存泄露监测工具)中监测的结果是用removeChild无法有效地释放dom节点.
  5. 创建事件监听 Dom 事件默认是向上冒泡的,发生在子节点中的事件,可以由父节点来处理. Event的 target/srcElement 仍是产生事件的最深层子节点. 这样,对于内容动态增加并且子节点都需要相同的事件处理函数的情况,可以把事件注册上提到父节点上,这样就不需要为每个子节点注册事件监听了. 
    同时,这样做也避免了产生无法回收的内存.即使是用Prototype的observe方式注册事件并在删除节点前调用stopObserving,也会产生出少量无法回收的内存,所以应该尽量少的为dom节点注册事件监听. 
    所以,当代码中出现在循环里注册事件时,也是我们该考虑事件上提机制的时候了.
  6. 监听动态元素 Dom 事件默认是向上冒泡的,发生在子节点中的事件,可以由父节点来处理. Event的 target/srcElement 仍是产生事件的最深层子节点. 这样,对于内容动态增加并且子节点都需要相同的事件处理函数的情况,可以把事件注册上提到父节点上,这样就不需要为每个子节点注册事件监听了. 
    同时,这样做也避免了产生无法回收的内存.即使是用Prototype的observe方式注册事件并在删除节点前调用stopObserving,也会产生出少量无法回收的内存,所以应该尽量少的为dom节点注册事件监听. 
    所以,当代码中出现在循环里注册事件时,也是我们该考虑事件上提机制的时候了.
  7. HTML提纯 HTML提纯体现的是一种各负其责的思想. HTML只用来显示,尽量不出现和显示无关的属性.比如onclick事件,比如自定义的对象属性. 
    事 件可以用前面的方法避免, 对象属性指的是这样的一种情景: 通常情况下,动态增加的内容都是有个对象和它对应,比如聊天室的用户列表,每个显示用户的dom节点都有一个user对象和它对应,这样在html中,应 该仅保留一个id属性和user对象对应,而其他的信息,则应通过user对象去获取.

 

分享到:
评论

相关推荐

    第06章 DOM节点操作(上)

    8. **DOM更新优化**:由于DOM操作可能导致浏览器重新渲染,频繁操作会降低页面性能。因此,可以使用`createDocumentFragment`在内存中构建新结构,再一次性插入,或者利用`requestAnimationFrame`在下一次重绘前进行...

    domtoimage使用HTML5canvas从DOM节点生成图像

    6. **Web性能优化**:转换DOM到图像可能会涉及大量计算,因此理解性能优化技巧,如延迟加载、异步处理、减少DOM操作等,对于优化这个过程至关重要。 7. **跨域问题**:由于同源策略的限制,当涉及到图片的跨域请求...

    DOM对象中的节点操作.pdf

    此外,DOM操作也关系到页面的性能优化,不合理的DOM操作可能会导致页面重绘和重排,从而影响性能。 总结来说,DOM对象中的节点操作是Web开发中的基础和核心,它包括了节点的概念理解、节点类型和属性的掌握、以及对...

    前端性能优化探索.pdf

    3. DOM操作优化:DOM操作是JavaScript中最耗费性能的操作之一,因此需要尽可能减少DOM操作的次数。例如,在修改多个元素的类名时,可以创建一个临时节点,然后一次性修改所有元素的类名,最后再删除临时节点。 ...

    原生JS经典小项目-DOM练习

    在JavaScript中,我们经常需要对DOM节点进行集合操作,这就涉及到了数组方法。尽管DOM节点集合本身并不是真正的数组,但它们具有类似数组的特性,可以使用数组的一些方法。例如: 1. `forEach()`:遍历DOM节点集合...

    javascript将DOM节点添加到文档的方法实例分析.docx

    本文将深入探讨如何使用JavaScript将DOM节点添加到文档中的两种方法,并通过实例进行分析。 首先,我们要理解DOM的基本概念。DOM是一种标准,它将网页视为一个由元素、属性和文本组成的树形结构。每个元素、属性和...

    JavaScript DOM节点操作实例小结(新建,删除HTML元素)

    总的来说,JavaScript DOM节点操作是Web开发中不可或缺的一部分,无论是新建元素来增加页面内容,还是删除元素来实现动态更新,都体现了JavaScript在网页动态化方面的强大能力。在实际项目中,开发者还需要注意性能...

    javascript 操作DOM

    在实际应用中,为了优化性能,通常会避免大量遍历DOM树,而是使用`querySelector`或`querySelectorAll`一次获取所有目标节点,或者使用文档碎片(`document.createDocumentFragment`)来批量操作节点,减少重绘和...

    前端性能优化指南

    - **缓存DOM引用**:如果需要多次访问同一个DOM节点,最好将其引用存储在一个局部变量中,避免重复查找。 - **处理HTML集合**:对于需要频繁操作的HTML集合,考虑将其复制到数组中,而不是直接操作集合本身,以减少...

    基于多核处理器的VTD-XML节点查询执行性能优化.pdf

    《基于多核处理器的VTD-XML节点查询执行性能优化》这篇论文主要探讨了在当前主流的多核处理器环境下,如何通过优化VTD-XML(Virtual Token Descriptor XML)技术来提升XML文档节点查询的执行性能。VTD-XML是一种高效...

    javascriptDom节点API个人总结.docx

    ### JavaScript DOM 节点 API 个人总结 #### 文档概述 本文档旨在总结JavaScript中DOM(Document Object Model)节点API的基本用法...当然,在实际项目中还需要结合具体的业务逻辑和性能优化策略,以达到最佳效果。

    Vue Render函数创建DOM节点代码实例

    在Vue中,`render` 函数接收一个参数 `createElement`,这个函数是用于创建虚拟DOM节点的。在上述代码实例中,我们可以看到如何使用 `createElement` 创建DOM元素: 1. **属性传递**:`createElement` 接受一个标签...

    前端项目-incremental-dom.zip

    - **优点**:性能优化,减少了DOM操作,提高了应用响应速度。 - **缺点**:学习曲线较陡峭,相比成熟的库如React,增量DOM的社区支持和文档可能不够丰富。 6. **实践建议**: - 使用incremental-dom时,需要深入...

    DOMscripting DOMscripting.rar DOMscripting.rar

    5. **性能优化**:讨论DOM操作的性能问题,如何避免不必要的DOM操作以提高页面性能。 掌握DOMscripting对于前端开发者来说至关重要,它不仅可以提升用户体验,也是实现现代Web应用动态特性的基石。通过学习和实践...

    大型网站性能优化方案

    在构建和运营大型网站的过程中,性能优化是至关重要的环节,它直接影响着用户体验、搜索引擎排名以及服务器资源的利用效率。本文将深入探讨“大型网站性能优化方案”,基于多年的实践经验,为优化工作提供指导。 ...

    前端性能优化原理与实践.zip

    在前端开发领域,性能优化是提升用户体验和网站可访问性的重要环节。这本"前端性能优化原理与实践"小册子深入探讨了如何通过一系列技术手段优化前端页面,旨在帮助开发者构建更快、更流畅的Web应用。以下是该压缩包...

    JS DOM操作备忘

    7. **性能优化** - 使用`document.querySelector()`和`document.querySelectorAll()`而非`getElementsByTagName()`,因为前者支持CSS选择器,更强大且效率更高。 - 尽可能使用事件委托,减少事件监听器的数目。 -...

    javascript将DOM节点添加到文档的方法实例分析

    在JavaScript中,将DOM节点添加到文档是一项基础且重要的操作。本文将介绍如何通过JavaScript将DOM节点添加到文档,并且通过实例分析不同的方法及其性能表现。 首先,我们来了解一下什么是DOM。DOM是文档对象模型...

    dom教程 dom文档对象实例教程

    9. **DOM性能优化**:讲解如何避免不必要的DOM操作以提升页面性能。 “JavaScript DOM文档”部分则专门针对JavaScript如何与DOM交互进行深入探讨,包括: 1. **DOM操作**:利用JavaScript直接操作DOM元素,如查找...

Global site tag (gtag.js) - Google Analytics