是否有任何工具或技术来检测"遗留"或"当前活动"的可观察对象、订阅.

最近发现了一个相当严重的内存泄漏,由于缺少"unsubscribe"调用,组件一直处于活动状态.我读过关于"takeUntil"的方法,这似乎很好.

然而,我仍然想知道是否有任何工具(浏览器扩展等)可以实现这一点.据我所知,占卜并不包括这一领域.

非常感谢您的所有意见.

推荐答案

免责声明:我是下面提到的工具的作者.

这可以通过保留添加新订阅的列表,并在取消订阅后从列表中删除订阅来实现.

麻烦的部分是observing订阅.实现这一点的一个简单方法是用monkey修补Observable#subscribe()方法,即替换Observable prototype方法.

这是observable-profiler的总体方法,这是一个开发工具,可以挂接到一个可观察的库(即rxjs),并在控制台中打印泄漏的订阅.

使用探查器的一种简单方法是,启动应用程序后开始跟踪,然后在一段时间后停止跟踪:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { Observable } from 'rxjs';
import { setup, track, printSubscribers } from 'observable-profiler';

setup(Observable);
platformBrowserDynamic([])
    .bootstrapModule(AppModule)
    .then(ref => {
        track();
        window.stopProfiler = () => {
            ref.destroy();
            const subscribers = track(false);
            printSubscribers({
                subscribers,
            });
        }
    });

一旦你想要一份报告,只需在devtools控制台中调用stopProfiler()即可.

Typescript相关问答推荐

如何传递基于TypScript中可变类型的类型?

Typescript对每个属性具有约束的通用类型

了解TS类型参数列表中的分配

TS不推断类型在条件判断后具有属性'

找不到带名称的管道''

在Typescribe中,extends工作,但当指定派生给super时出错""

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

ANGLING v17 CLI默认设置为独立:延迟加载是否仍需要@NgModule进行路由?

使用TypeScrip的类型继承

转换器不需要的类型交集

在组件卸载时try 使用useEffect清除状态时发生冲突.react +打字

缩小对象具有某一类型的任意字段的范围

将布尔值附加到每个对象特性

什么';是并类型A|B的点,其中B是A的子类?

显式推断对象为只读

如何使用 runInInjectionContext 中的参数测试功能性路由防护

我可以在 Typescript 中重用函数声明吗?

为什么 typescript 在对象合并期间无法判断无效键?

如何解决联合类型上的此表达式不可调用?

如何从列表中仅 Select 一种类型?