Javascript 为什么是React';s的虚拟DOM概念据说比脏模型检查更有效?
我在()上看到了一个开发人员的演讲,演讲者提到对模型的脏检查可能会很慢。但是,由于虚拟DOM在大多数情况下应该比模型更大,所以计算虚拟DOM之间的差异的性能不是更差吗Javascript 为什么是React';s的虚拟DOM概念据说比脏模型检查更有效?,javascript,dom,reactjs,virtual-dom,Javascript,Dom,Reactjs,Virtual Dom,我在()上看到了一个开发人员的演讲,演讲者提到对模型的脏检查可能会很慢。但是,由于虚拟DOM在大多数情况下应该比模型更大,所以计算虚拟DOM之间的差异的性能不是更差吗 我非常喜欢虚拟DOM的潜在功能(尤其是服务器端渲染),但我想知道所有的优点和缺点。我最近在这里读了一篇关于React的diff算法的详细文章:。据我所知,快速反应的原因是: 批处理DOM读/写操作 只对子树进行有效更新 与脏检相比,IMO的主要区别在于: 模型脏检查:只要调用setState,React组件就会显式设置为脏,因
我非常喜欢虚拟DOM的潜在功能(尤其是服务器端渲染),但我想知道所有的优点和缺点。我最近在这里读了一篇关于React的diff算法的详细文章:。据我所知,快速反应的原因是:
- 批处理DOM读/写操作
- 只对子树进行有效更新
setState
,React组件就会显式设置为脏,因此这里不需要比较(数据)。对于脏检查,(模型的)比较总是在每个摘要循环中进行第二点对于非平凡模型更为重要,例如具有大量字段或大型列表的模型。复杂模型的一个字段更改只会导致涉及该字段的DOM元素所需的操作,而不是整个视图/模板。以下是React团队成员Sebastian Markbåge的评论,其中透露了一些信息: React对输出(这是一种已知的可序列化格式,即DOM属性)进行diffing。这意味着源数据可以是任何格式。它可以是不可变的数据结构和闭包内部的状态 角度模型不保持参照透明度,因此本质上是可变的。修改现有模型以跟踪更改。如果您的数据源每次都是不可变的数据或新的数据结构(例如JSON响应),该怎么办 脏检查和Object.observe在关闭作用域状态下不起作用 显然,这两件事对功能模式非常有限 此外,当您的模型复杂度增加时,进行脏跟踪的成本会越来越高。但是,如果您只在可视化树上进行diffing,比如React,那么它就不会增长太多,因为您在任何给定点能够在屏幕上显示的数据量都受到ui的限制。Pete上面的链接涵盖了更多的性能优势
我是模块的主要作者,因此我可能能够回答您的问题。事实上,这里有两个问题需要解决
- 快速高效的“差分”算法
- 多个前端(JSX、hyperscript)
- 足够轻,可以在移动设备上运行
- 大量的牵引力和分享
- 可在无反应的情况下使用(即作为独立发动机)
- DOM的完整内存拷贝(更高的内存使用)
- 静态和动态元素之间没有区别
document.getElementById('elementId').innerHTML = "New Value" Following thing happens: