在我的Angular应用程序的整个会话期间,订阅多个RxJS观测值对性能有什么影响?

在我的Angular应用程序的整个会话期间,订阅多个RxJS观测值对性能有什么影响?,angular,typescript,performance,rxjs,ngrx,Angular,Typescript,Performance,Rxjs,Ngrx,我正在开发一个Angular应用程序,我们希望跟踪一些动作事件,以便进行一些报告 目标之一是保持组件逻辑尽可能干净,并尽可能减少跟踪性能影响 从ngrx效果中我们可以选择一种方法来实现这一点,即声明特定的跟踪器观测值(使用RxJS,每个动作事件一个),合并它们,并在应用程序启动时订阅合并的观测值(在整个会话期间保持活动状态)。每个跟踪器对特定的动作事件进行过滤。 通过这种方式,我们可以在组件中调度与主题相关的操作事件,这些事件由跟踪器异步处理,而不是应用程序流 今天我们有大约30个事件(因此30

我正在开发一个Angular应用程序,我们希望跟踪一些动作事件,以便进行一些报告

目标之一是保持组件逻辑尽可能干净,并尽可能减少跟踪性能影响

从ngrx效果中我们可以选择一种方法来实现这一点,即声明特定的跟踪器观测值(使用RxJS,每个动作事件一个),合并它们,并在应用程序启动时订阅合并的观测值(在整个会话期间保持活动状态)。每个跟踪器对特定的动作事件进行过滤。
通过这种方式,我们可以在组件中调度与主题相关的操作事件,这些事件由跟踪器异步处理,而不是应用程序流

今天我们有大约30个事件(因此30个观测值需要合并),但也许有一天会有数百个(数百个观测值需要合并)

这些RxJS的可观测性对性能有何影响?
合并它们并只有一个订阅是否会减少影响?



编辑1:一项实践测试表明,合并和单一订阅没有显著差异

如果使用合并订阅所有订阅或单独订阅每一个订阅,实际上没有差异。这里唯一的区别是你有共同的行为,比如错误和完整的信号

如果您使用merge来订阅所有它们,或者单独订阅每一个,实际上没有什么区别。这里唯一的区别是你有共同的行为,比如错误和完整的信号

您的具体性能要求是什么?您现在离这有多远?我会使用nodejs profiler并使用10对100的观测值来测量性能。现在没有正式要求,我们只是想在浏览器任务管理器中检查内存占用/CPU。非官方的要求是,这些测量值不受可观测值的显著影响。Chrome任务管理器的测试表明,每秒有100个运行的可观察对象执行一个空函数(类似于我们所拥有的过滤函数)永久性地将CPU测量值从0提高到~9可悲的现实是NgRx团队比我好得多,因为在100个效果下,CPU将提高到0.3:)您的具体性能要求是什么,你现在离这有多远?我会使用nodejs profiler,用10对100的观测值来衡量性能。现在没有官方要求,我们只是想在浏览器任务管理器中检查内存占用/CPU。非官方的要求是,这些测量值不受可观测值的显著影响。Chrome task manager的一项测试表明,每秒执行一个空函数的100个运行观察值(类似于我们将拥有的过滤函数)会永久性地将CPU测量值从0提高到~9。不幸的现实是,NgRx团队要比我好得多,因为有了100个效果,CPU将提高到0.3:)