首页 文章

为什么浏览器不能在内部使用虚拟dom作为优化?

提问于
浏览
9

互联网上有很多SO问题和博客试图解释虚拟dom是什么,但这个问题是为什么这种优化必须在JavaScript /作为框架的一部分而不是由浏览器本身实现 .

据我所知,虚拟DOM是一个由Javascript对象组成的树,父母/子女等,但没有真正DOM的大部分“重”特征 . 框架(例如React / Vue)通过从头开始创建虚拟DOM来响应模型状态的更改,然后在其虚拟DOM的最后一个版本上执行diff以确定要更改的真实DOM .

我读过的许多内容都声称虚拟DOM更快,因为真正的DOM每次发生变化时都必须重新布局(甚至重新绘制),但事实并非如此 - 只有当需要重新布局时才需要重新布局某些JS代码明确要求某些样式/文本流相关值(例如高度/宽度等) . 并且可能大多数使用虚拟DOM的框架在这方面做得不够好 - 除了确保开发人员不会意外地做到这一点 .

此外,最近在某些时候浏览器正在考虑为DOM变异提供事件挂钩,但是这个想法已被放弃,这意味着不应该在DOM被突变的点上触发任何事件 .

所以我的问题是,这会带来什么好处呢? JS框架有哪些额外的信息或额外的自由,使其具有执行虚拟DOM优化的“逻辑”能力?

1 回答

  • 4

    虚拟DOM就像当前情况的解决方法 . W3C正在努力重新构建DOM并使当前的"virtual DOM"本地化为浏览器 . 但是你知道这有多慢 - 它必须起草,讨论,接受,然后开始有趣的部分 - 在不同的浏览器中实现它 . 他们仍然遇到CSS3和flexbox模型的问题 - 每个浏览器都有自己的条款和标准来处理这些问题 .

    它与Virtual DOM相同 - 他们仍然没有接受它作为跨浏览器的解决方案 . 这最终将在未来发生,但在那之前 - 我们使用JS选项 .

    如果你遵循JS世界 - 它与 Promises 几乎相同 - 我们得到了 bluebirdjQuery 实现,但最后 Promises 本地化,并且不再需要所有这些库和框架 .

相关问题