用 js 模仿一颗 dom 树,放在欣赏器内存中.当你要变更时,假造 dom 使用 diff 算法进行新旧假造 dom 的比较,将变更放到变更队列中,反应到实际的 dom 树,淘汰了 dom 操作。
假造 DOM 将 DOM 树转换成一个 JS 对象树,diff 算法逐层比较,删除,添加操作,但是,如果有多个相同的元素,可能会浪费性能,所以,react 和 vue-for 引入 key 值进行区分。
优点:
保证性能下限: 框架的假造 DOM 需要适配任何上层 API 可能产生的操作,它的一些 DOM 操作的实现必须是普适的,所以它的性能并不是最优的;但是比起粗暴的 DOM 操作性能要好许多,因此框架的假造 DOM 至少可以保证在你不需要手动优化的情况下,依然可以提供还不错的性能,即保证性能的下限;
无需手动操作 DOM: 我们不再需要手动去操作 DOM,只需要写好 View-Model 的代码逻辑,框架会根据假造 DOM 和 数据双向绑定,帮我们以可预期的方式更新视图,极大提高我们的开发服从;
跨平台: 假造 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下假造 DOM 可以进行更方便地跨平台操作,例如服务器渲染、weex 开发等。
缺点:
无法进行极致优化: 虽然假造 DOM + 合理的优化,足以应对绝大部分应用的性能需求,但在一些性能要求极高的应用中假造 DOM 无法进行针对性的极致优化。
首次渲染大量 DOM 时,由于多了一层假造 DOM 的盘算,会比 innerHTML 插入慢。
15、mixin 是什么?优缺点?原理?vue3 用什么取代了?