angular - 使用服务或属性和事件的角度性能
问题描述
文档提到了组件交互的几种方式:
https://angular.io/guide/component-interaction
使用服务而不是属性/事件是否有性能优势,或者相反?
我还是 Angular 的新手,并且一直在使用服务在组件之间共享数据,但我觉得这会使数据“全球化”,这样任何组件都可以在允许的情况下读取或写入服务。我正在考虑切换到属性/事件作为强制数据范围的一种方式,并尝试限制全局使用数据的服务(如日志或其他真正需要通用访问的数据)。
那里有内存<-> cpu 权衡吗?
解决方案
一般来说,原则上,两者的目的不同。
当您需要“做某事”时使用服务,例如与 REST API 通信、缓存数据或任何其他可服务接口下的内容,可以重用并绑定到应用程序的生命周期。
另一方面,事件旨在“响应”事物。例如,当点击事件发生时,需要触发和处理回调,其生命周期与应用程序的生命周期无关,而是与事件及其回调的生命周期相关。
当然,没有理由不能将两者混合使用(例如,如果您的服务是“反应式”的,那么在服务中使用 EventEmitter<>/RX 观察者就非常好;例如,当它正在侦听 websocket 连接并且需要通知 1-N 个订阅者),但一般设计原则应该是在有意义的地方使用服务/事件。
此外,正如您所提到的,服务是全局的(在上下文/模块内),而事件和属性通常是本地化的。出于这个原因,最好在全局交互有意义的地方使用服务(例如共享基础设施),并在应该本地化的地方使用事件/属性。
我的建议:
在需要执行缓存、需要执行外部通信(websocket/webapi)或需要在多个组件/服务/层之间共享通用功能时使用服务。
使用事件和属性的唯一目的是在 2 个(或更多,如果链接的)组件之间共享数据,因为它们通常更干净用于此目的(组件的接口将准确地指示它输入和输出的内容)。
您要避免的是创建太多“服务”,这些“服务”仅充当组件之间的通信网关,其中事件/属性(输入和输出)更有意义。
推荐阅读
- c++ - 通过 CMAKE 将配置文件作为静态库的一部分
- c# - 如何在winforms的实时图表中自定义图例?
- kubernetes - Ubuntu上的kubernetes:通过consul与其他主机交互的微服务问题
- java - 如何在 gradle 文件中的一个任务中执行多个 shell 脚本
- java - 将 hashmap 作为值添加到 hashmap
- google-docs - Google 文档或其他插件中的插件,用于在 App Maker 中提供功能
- php - 使用 create_shared_link_with_settings 的路径问题
- python - 使用 Selenium Webdriver Python 多次运行测试
- php - 使用 woocommerce REST API 将 PDF 上传到产品
- python - 如何将具有 lambda 函数的 tesseract 压缩文件部署到 aws lambda