【问题标题】:do we need to destroy/disconnect a Vue.observable?我们需要销毁/断开 Vue.observable 吗?
【发布时间】:2020-09-18 05:46:49
【问题描述】:

我们需要销毁或断开使用Vue.observable()时创建的可观察对象吗?

https://vuejs.org/v2/api/#Vue-observable

通常最好销毁任何新对象并清除超时以及任何可能导致beforeDestroy 上的内存泄漏的事情。 但我想知道内部 Vue Observer 实例是否也被组件销毁的内部机制(如组件本身)销毁,如果不是,如何正确停止观察并摆脱这些数据?

即使查看了 Vue 的源代码,我仍然不清楚是否应该销毁 Observer。 Observer 类(使用 Vue.observable() 在内部创建)似乎没有任何方法可以停止观察,而且官方 Vue 文档中也没有记录。

请提供您的答案的参考,以便我了解更多信息。

【问题讨论】:

    标签: vue.js observable


    【解决方案1】:

    在使用某些浏览器 API 时需要进行清理,这些 API 在 JavaScript 运行时之外创建资源(如 setInterval)或使用创建新 DOM 节点的非 Vue 库时。

    Vue.observable 只需修改使用Object.defineProperty() 传递的对象 - 调用的结果是相同的 JS 对象。而且因为 JS 是 garbage collected 语言/运行时,所以不需要手动清理/销毁。当没有引用对象时,运行时(没有 Vue)会自动对对象进行垃圾收集。

    Vue 3 reactive() 不同,因为调用的结果是新对象 - proxy - 但它仍然是普通的 JS 对象,因此它会自动被垃圾收集...

    【讨论】:

    • 谢谢!听起来很棒,而且我学到了有关标记和扫描 GC 算法的新知识!希望这在所有情况下都是可行的。
    • Vue 拥有最好的文档之一。您可以确定是否需要进行此类清理,我们会仔细记录...
    猜你喜欢
    • 2017-05-01
    • 2020-04-06
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2019-07-24
    • 2011-11-08
    • 2016-08-04
    • 2017-12-30
    相关资源
    最近更新 更多