angular - Angular 7 中注入服务与单例服务的内存和性能比较
问题描述
我想了解 Angular 7 中单例与注入服务的内存和性能影响。
例如,假设我在页面上有一个组件列表,并且每个组件都注入了相同的服务(即它在组件提供程序中列出)。这是否意味着如果我有 50 个组件,我将需要 50 倍于注入服务的内存需求,而不是对所有人都通用的单例服务?
是否还有其他性能影响需要考虑?
解决方案
这是否意味着如果我有 50 个组件,我将需要 50 倍于注入服务的内存需求,而不是对所有人都通用的单例服务?
仅当每个组件具有不同的模块并且:
各模块提供服务;
或者在一个模块中提供服务,在每个组件模块中导入该模块;
如果任何组件共享一个提供服务的模块,它将围绕这些组件是单例的。
我读过Netanel Basal的一篇非常好的文章—— “Angular Services do not have to be Singleton ”
他在谈到单例服务时说:
The sole purpose of the service is to share data between child’s components and to provide a couple of helper’s methods.
如果你有一个单例服务,它将只是一个实例,但在整个应用程序生命周期中(即使你不使用它),否则,如果你有非单例服务实例,它将消耗更多的内存和每个服务实例只有当其模块的所有组件都被销毁时才会被销毁。
我想说你可以尝试在你的应用程序中控制这些好处的权衡。
其他非单身福利是:
我们甚至可以实现ngOnInit
和ngOnDestroy
生命周期,你可以在这里查看。
推荐阅读
- php - 使用 php 从 mysql 表中获取数据并做出本机反应
- python - bs4 中 .find() 的正确语法是什么?
- crash - Android Studio 在第一次运行时崩溃了
- jenkins - 在 Jenkins 中获取批处理文件的返回
- javascript - React:有条件地显示和隐藏 CSS 选择器
- javascript - 我需要帮助从串行 RS485 设备读取二进制/十六进制字符串响应
- sandbox - DLL 注入可以用来突破沙箱吗?
- jquery - 如何向这个 JQuery 图像交换添加一个简单的淡入淡出动画?
- python - Concat 2 columns in pandas - AttributeError: 'DataFrame' object has no attribute 'concat'
- android - 无法在 android studio 中解析符号“com”