Skip to content

Latest commit

 

History

History
35 lines (18 loc) · 2.22 KB

File metadata and controls

35 lines (18 loc) · 2.22 KB

虚拟 DOM 是否真的比操作原生 DOM 快

Reference: zhihu

说到虚拟 DOM 是否真的比操作原生 DOM 块,答案并不是绝对的。虚拟 DOM 的主要优势在于他提高了前端框架处理 DOM 更新的效率,但这并不意味着它在每个场景下都比直接操作原生 DOM 块。理解这一点需要从几个不同的角度来看

批量更新和最小化 DOM 操作

虚拟 DOM 通过批量更新和最小化真实 DOM 操作的方式来提高性能。在复杂应用中,频繁地擦欧总 DOM 是造成性能瓶颈的主要原因之一。虚拟 DOM 通过以下机制优化了这一过程:

  • 差异比较(Diffing)

    虚拟 DOM 允许框架在内存中比较前后两次状态的差异,然后计算出最小的更新操作集合,只更新哪些真正改变了的部分。这种比较是在内存中进行的,速度远快于直接操作 DOM

  • 批量更新

    通过聚合这些变更,然后一次性更新 DOM,虚拟 DOM 减少了浏览器的重绘和重排次数,这些操作是性能开销较大的

性能开销

虚拟 DOM 的使用并不是没有代价的。构建虚拟 DOM 树、进行 Diff 计算以及最后的重绘步骤本身都需要时间。在简单的应用或者是单次的、少量的 DOM 操作中,直接操作原生 DOM 可能会更快,因为避免了虚拟 DOM 的额外计算开销

场景依赖

  • 简单的 DOM 操作

    对于简单的页面或操作,直接使用原生 DOM 可能会更快,因为没有虚拟 DOM 带来的额外计算和内存使用

  • 复杂的应用

    对于复杂的 SPA,虚拟 DOM 可以显著提高性能。在这些应用中,可能会有成百上千个的组件和频繁的状态更新,直接操作原生 DOM 不仅难以管理,而且可能引起严重的性能问题

总结

虚拟 DOM 不是在所有情况下都比操作原生 DOM 块,它的优势在于能够提供更高效的方式来更新大型和复杂的用户界面。通过减少实际的 DOM 擦欧总数量和优化 DOM 更新的过程,虚拟 DOM 在许多场景下能够提供更好的性能和开发体验。然而,在某些简单场景或单次操作中,直接使用原生 DOM 可能会更为高效