全部:
我对 React.js 很陌生,听说过很多关于 React 虚拟 dom,但我有点想知道它和真实 DOM 在处理像改变元素样式这样的简单案例时的主要区别是什么:
假设我想改变一个 div 与其他人的距离,我可以使用 jQuery:
$("div#test").css("margin-left","10px");
我对浏览器如何处理真实 dom 的理解是:
- 向下搜索 DOM 树并找到该节点。
- 根据样式属性更新(我猜是 CSSOM 树)
- 渲染视图
所以我的问题是:
- 我的理解正确吗?
- 如果基本正确,那么虚拟 DOM 做了什么来提升性能呢?它不只是使用 diff 算法来比较其轻量级版本 DOM 树中需要更新的内容并发现 margin-left 需要更新,并将与 jquery 中相同的内容应用于真实 DOM 吗?
或者
- 如果不正确,谁能详细说明浏览器对真实 DOM 做了哪些繁重的工作,而 React 虚拟 DOM 跳过以提高性能?
我发现一篇文章提到了关于虚拟 DOM 的 3 个详细操作:
让它真正快速的原因是:
- 高效的差异算法。
- 批处理 DOM 读/写操作。
- 仅有效更新子树。
因此,与此相比,这是否意味着在真实的 DOM 中:
- 不是很有效的差异算法或没有差异算法(只更新所有内容)?
- 单个读/写操作,例如如果我对相同的 DOM 元素进行 3 次样式更新,浏览器会在 DOM 树中查找该元素 3 次并更新样式?
- 从根更新整个DOM(基本上就像转储当前树并重新构建整个DOM树,无论树的哪个部分需要更新,并找到节点并更新)
谢谢