【问题标题】:Can Observables cause memory leaks if page is closed?如果页面关闭,Observables 会导致内存泄漏吗?
【发布时间】:2021-04-07 15:57:24
【问题描述】:

对于初学者的问题,我很抱歉,但这是我有点困惑的问题,并且找不到相关文档。所以我明白,如果你订阅了一个 observable,如果没有取消订阅,它可能会导致内存泄漏(例如在 OnDestroy 中,因为我主要使用 Angular)。但是,如果您关闭标签/页面,这仍然是一个问题吗?据我所知,应用程序所在的服务器没有运行它,只是将前端代码提供给浏览器,然后浏览器运行/加载它。因此,如果您没有正确取消订阅 observable,那么在您关闭应用程序运行的选项卡后,它仍然应该被“销毁”,对吧?我不确定浏览器是如何准确存储这些内容的,所以我不是 100% 参与其中,但这对我来说听起来很合乎逻辑,因为应用程序大部分时间都不是 24/7 运行的,这只是一个问题一整天都在运行,对吗? (是的,我知道我们应该每次都取消订阅,我只是出于好奇才问这个)。

【问题讨论】:

  • 关闭选项卡/页面应该会释放与该页面相关的所有内容(可能不是立即,但足够快),无论如何该页面上的代码中的任何错误。这取决于各个浏览器的实现。

标签: javascript angular


【解决方案1】:

之前有人问过类似的问题:with rxjs and angular, Is it necessary to unsubscribe for the subscriptions that happen only once in app component's onInit method?

这里还有一个explanation,其中重现了内存泄漏以及为什么必须取消订阅。我已获取该 url 上的代码并将其添加到 stackblitz 以供参考。您可以取消注释代码以取消订阅 observable 并刷新 url。

我由此理解的结论是关闭标签后,应该没有内存泄漏。

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2014-05-18
    • 2021-03-23
    • 2021-09-25
    • 2014-12-08
    相关资源
    最近更新 更多