提问人:Kote Isaev 提问时间:11/6/2023 更新时间:11/6/2023 访问量:11
有没有办法比较涉及虚拟 DOM 的渲染方法的内存消耗?
Is there a way to compare memory consumption of rendering approaches involving virtual DOM?
问:
反应
据我所知,React 基于这样的方法在更新时发生: 0) 在每次更新时重新创建任何内容,包括函数组件中声明的函数,包括作为 useState、setState 或 useEffect 参数的函数,以及其他钩子。
- 虚拟 dom 有 2 个版本(“当前”和“新”)。在更新流程期间,它们都位于内存中。
- 应用差异后,结果变为虚拟 dom 的“当前”版本,并丢弃以前的版本(计划用于最终的 GC?
- 虚拟 dom 应用于真实 dom。
替代理论 1
如果改用这种方法会怎样:
- 单个 VDOM(状态树)位于内存中
- 当更改为状态时,通过子组件的状态传播,如果在子组件属性中与它有任何绑定,
- 为更改的组件创建的新 real dom 作为应用于 requestAnimationFrame 调用中的真实 dom 的更改
3 的原因是它应该允许减少轻拂,因为对真实 dom 的所有更新都将发生在 requestAnimationFrame 内,“对用户不可见”,并且结果会减少,排序自动节流进程,并且在应用这些更新期间将运行更少的浏览器代码,并且在 requestAnimationFrame 回调完成后将触发实际组合(毕竟我希望如此)。
另类理论 2
分离渲染和初始化,例如
interface ComponentImplementation<TProps extends object, TState extends object> {
initialize(props): TState;
render(state:TState): VDomElement|(VDomElement[]);
}
理论 3
它本质上是理论 2 和作为 requestAnimationFrame 一部分的渲染调度的组合
问题
在内存消耗方面什么更好? 是否有一些实验库实现了类似理论 #1、#2、#3 的东西?
答: 暂无答案
评论