【发布时间】:2016-01-09 11:33:22
【问题描述】:
我读到 ReactJS 与其他框架相比非常快,因为 if 使用虚拟 dom。
我无法理解的是最终所有框架都必须在浏览器中推送 dom 对象。 virtualDom 如何帮助提高速度?
假设我要添加10K节点列表,ReactJS和其他框架所需的DOM操作时间不应该相似吗?
【问题讨论】:
-
它只执行需要执行的更改。速度的提高是您将新树与虚拟树进行更改,而不是针对速度较慢的真实 DOM。如果您需要从头开始渲染 10k 节点,那么在任何地方都会很慢:整个事情都针对现有结构的频繁更改进行了优化。
-
使用虚拟 DOM 也可以进行优化;例如,如果您通常必须在 React 中“添加 10K 节点”,您可能会构建一个包含 10K 项的数组,然后在引擎盖下 React 可能会在一个
innerHTML操作中将其刷新到 DOM(显然 DOM 仍然很慢但操作次数可以优化)。 -
令人惊讶的是,实际上并不是虚拟 DOM 本身在大型模型上比其他框架反应更快,它避免了对大型模型上更改的脏检查/观察。公平地说,一旦发现,DOM 的角度变化与反应中的变化一样快。虚拟 dom 的优点是可以观察视图输出而不是模型。在 bigO 中,这是
O(model)和O(view)之间的区别,并且由于分页、制表符等,当需要实际更新视图时,通常需要排序的视图片段少于模型片段。
标签: javascript performance reactjs virtual-dom