javascript - 虚拟 DOM 的比较算法是否能够找出唯一的差异并修补真实 DOM?

标签 javascript reactjs dom diff virtual

我对 Virtual DOM 及其 diff 算法的了解是,当某些组件(或元素/及其子组件)发生更改时,协调该特定组件和子组件是有效的,因为除此之外,其他组件DOM 组件不会改变。

但是我已经知道,DOM 操作最耗时的部分是重新计算元素样式(如 CSS)的时刻。

如果许多其他组件之间的组件发生变化,例如高度样式发生变化或被卸载,通过这种变化,下面的兄弟组件将受到影响,其中这些组件的样式应该全部重新渲染(重新布局或重新绘制)。

那么,这是否意味着 React 的目标——通过虚拟 DOM 和 diff 算法仅操作 View 的变化部分——无法实现?

是我理解错了,还是这很正常?

如果这是正常情况(由于其他组件中间的组件发生变化,下面的其他组件也必须修改的情况),那么React与普通的DOM操作方法相比,除了批处理之外,还有什么优势还是声明式方法?可以称其为“补丁”吗?

最佳答案

您担心的是,更改父组件的样式可能会触发其子组件的浏览器布局

但是无论你是否使用react的virtual dom,这个问题仍然会出现

  • React 虚拟 dom 的好处是它聚合 dom 操作并消除冗余操作

    与“手动编码”相比,这种广泛的优化通常会导致更少的总 dom 操作

  • 在极少数情况下,通过非常仔细地手动管理 dom 操作,您也许能够在没有 React 虚拟 dom 的情况下产生更优化的结果

    “手动”很少值得考虑

关于javascript - 虚拟 DOM 的比较算法是否能够找出唯一的差异并修补真实 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53679719/

相关文章:

javascript - multer 文件上传不起作用

javascript - React 0.13.3 和 React-highcharts 3.0.0 的 Nodata 消息

Javascript 数组 indexOf 返回未定义

javascript - 为什么 DOM 读/写操作的微小重新排序会导致巨大的性能差异

reactjs - react 路由器如何在页面刷新时保留位置状态?

reactjs - Emotion.js 与 create-react-app : ReferenceError: jsx is not defined

css - 当放置在 <head/> 标签内时,TinyMCE React 会去除 &lt;style/> 标签

javascript - 使用 not in querySelector with spaces

javascript - 对象窗口 ['0' ] 和窗口 ['1' ] 在 javascript 中的含义是什么

javascript - 如何使用 YUI 进行适当的内存管理以避免泄漏