高效操作 DOM

简介: 高效操作 DOM

我将讨论在管理和更新 DOM 时避免过度内存使用的最佳实践,以使您的应用程序达到极快的速度™️。

DOM: 文档对象模型 – 简介
当您渲染 HTML 时,浏览器中这些渲染元素的实时视图称为 DOM。您可以在开发者工具的 “元素” 检查器中看到它:

Chrome 开发者工具中的元素面板

它本质上是一个树结构,其中每个元素都是一个叶子。整个 API 集专门用于修改这个元素树。

以下是一些常见的 DOM API 列表:

querySelector()
querySelectorAll()
createElement()
getAttribute()
setAttribute()
addEventListener()
appendChild()

这些 API 附加在 document 对象上,所以您可以像这样使用它们:const el = document.querySelector("#el");。它们也可用于所有其他元素,因此如果您有一个元素引用,您可以使用这些方法,并且它们的功能范围限于该元素。

const nav = document.querySelector("#site-nav");
const navLinks = nav.querySelectorAll("a");

这些方法将在浏览器中可用以修改 DOM,但在服务器端 JavaScript(如 Node.js)中不可用,除非您使用像 js-dom 这样的 DOM 模拟器。

作为一个行业,我们将大部分直接渲染工作转移到了框架上。所有 JavaScript 框架(React、Angular、Vue、Svelte 等)都在底层使用这些 API。虽然我认识到框架的生产力优势通常超过了手动 DOM 操作的潜在性能提升,但我希望在本文中揭开这些底层操作的神秘面纱。

为什么首先要自己操作 DOM?
主要原因是性能。框架可能会添加不必要的数据结构和重渲染,导致许多现代 Web 应用中令人讨厌的卡顿/冻结现象。这是由于垃圾回收器需要处理大量代码而被迫超负荷工作。

缺点是手动操作 DOM 会产生更多代码。这可能会变得复杂,这也是为什么使用框架和围绕 DOM 的抽象会带来更好的开发者体验的原因。尽管如此,有些情况下您可能需要额外的性能提升。这个指南就是为这些情况准备的。

VS Code 是基于手动 DOM 操作构建的
Visual Studio Code 就是这样的案例之一。VS Code 是用原生 JavaScript 编写的,“尽可能接近 DOM”。像 VS Code 这样的大型项目需要对性能进行严格控制。由于其强大的插件生态系统,核心必须尽可能核心和轻量化,这也是其广泛采用的原因。

目录
相关文章
|
JavaScript 前端开发 算法
虚拟 DOM 一定更快吗
虚拟 DOM 一定更快吗
54 0
|
JavaScript 前端开发 算法
虚拟dom如何提高性能
虚拟dom如何提高性能
|
4天前
|
编解码 缓存 JavaScript
跨平台的虚拟 DOM 实现方式
【10月更文挑战第25天】跨平台虚拟 DOM 的实现方式通过多种技术和机制的结合,为开发者提供了一种高效、统一且具有良好兼容性的跨平台开发模式。这些实现方式在不同程度上解决了跨平台开发中的诸多问题,使得开发者能够更轻松地构建出在多种平台上运行良好的应用程序。
|
4天前
|
JavaScript 前端开发 算法
框架为什么要设计虚拟 dom?
【10月更文挑战第26天】框架设计虚拟 DOM 是为了在性能优化、开发效率提升、可维护性增强以及跨平台适配等方面提供更好的解决方案。它有效地解决了传统前端开发中存在的诸多问题,使得前端开发更加高效、灵活和可维护,为构建复杂的现代 Web 应用和跨平台应用提供了有力的支持。
19 6
|
21天前
|
缓存 监控 JavaScript
如何优化虚拟 DOM 的性能?
【10月更文挑战第1天】 优化虚拟 DOM 性能的方法包括减少不必要的渲染、优化 diff 算法、缓存虚拟 DOM 节点、避免过度嵌套的组件结构、合理使用事件处理、按需加载组件和模块、优化渲染流程及监控性能。这些策略有助于提升前端应用的性能和用户体验。
|
21天前
|
JavaScript 算法 前端开发
为什么虚拟 dom 会提高性能?
【10月更文挑战第1天】
|
JavaScript
DOM 操作
DOM 操作
|
5月前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
42 1
|
6月前
|
JavaScript 前端开发 算法
为什么虚拟dom会提高性能?
为什么虚拟dom会提高性能?
70 0
|
6月前
|
JavaScript 前端开发 算法
为什么虚拟dom会提高性能
为什么虚拟dom会提高性能
102 0