vue Quadratic memory usage

jutyujz0  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

版本

2.5.4

复现链接

https://codepen.io/anon/pen/KyyxKB?editors=1010

复现步骤

  1. 打开浏览器开发者工具
  2. 使用不同的MAX变量启动复现(100, 200, 500, 1000, 1500, 2000, 4000)
  3. 注意内存使用量随着MAX变量的增长呈二次方增长,而程序中计算属性的数量及其隐含依赖关系与MAX变量成正比。

预期结果是什么?

预期内存消耗随着MAX变量的增长呈线性(即成比例)增长。

实际发生的情况是什么?

所有 data_X 可观察对象都将其所有 computed_X 计算值作为订阅者,因此总订阅数呈二次方增长。
很难编写一个真正影响到有此bug的用户代码,但无论如何,这感觉像是响应式系统设计中的一个缺陷。

ehxuflar

ehxuflar1#

经过一些调查,我想知道这种用法是否值得在响应式系统中进行重大的重新设计。
Vue有两个底层的响应式组件,WatcherDep。它们与 OutputInput 非常相似:WatcherDep 改变时执行回调。问题是没有这样的组件像 pipe 那样:既执行回调又通知观察者。
所有可观察对象都有其计算值的所有订阅者
这就是我们如何使用观察者和依赖项来模拟 pipe 的方法。为了优化内存使用,我们可能需要在 https://github.com/lihaoyi/scala.rx 中创建一个新的响应式组件,如 Rx
然而,这个新类可能只优化有限的使用情况。正如 OP 已经指出的:
编写真正影响用户并受此 bug 影响的代码是非常困难的

相关问题