【问题标题】:Why is dagger considered better for AWS lambda implementation than Guice?为什么 dagger 在 AWS lambda 实施中被认为比 Guice 更好?
【发布时间】:2019-05-02 02:05:19
【问题描述】:

我知道 dagger 在编译时通过生成代码来创建注入,因此它的性能优于在运行时执行的 Guice。但特别是对于 lambda 的情况,我看到它在多个地方提到 Dagger 是首选。是因为冷启动问题吗?

由于 lambda 中的冷启动问题,当长时间后收到请求时,lambda 会继续进行多次引导。那么,使用 dagger,引导程序会比 Guice 快得多,因为它已经生成了代码?我是说,与延迟加载相比,Guice 中的所有对象是否也是在引导期间创建的。

【问题讨论】:

  • 根据我的建议编辑,这个问题专门针对 Dagger 2。Dagger 1 与 Guice 具有相同的限制。 The Dagger 2 maintainer explains Dagger 2 何时以及为何成为 Android 和 Lambda 等平台的首选。

标签: amazon-web-services aws-lambda guice dagger-2


【解决方案1】:

如您所知,任何依赖注入框架在某些时候都需要为您的应用程序所需的对象构建某种依赖关系图。构建此图通常是 DI 框架中计算成本最高的部分。

Guice 在运行时使用反射计算出这张图。 Dagger 在编译时生成表示依赖关系图的代码。我不知道哪个更快,但我知道使用反射会导致性能下降。

然而,最大的不同是 Dagger 在编译时完成了所有繁重的工作(这意味着你只做一次工作,不管你运行多少次),而 Guice 必须在每次应用程序启动时做同样的工作向上。

现在,回答您的问题,如果您的应用程序频繁启动和停止,则首选 Dagger。对于像移动应用程序这样的东西,较慢的启动时间只会降低用户体验。使用 Lambda,它不仅会减慢冷启动时间,而且由于您需要为代码运行的时间量付费,因此不断地重建依赖图实际上会花费您更多的钱。

TLDR; Dagger 在 Lambda 上是首选(对于冷启动时间和成本),因为它将 DI 框架中最昂贵的部分移动到编译时而不是在运行时执行。

【讨论】:

  • 非常感谢您的回答。它不仅非常有见地,而且阅读起来也很愉快。赞一个!
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2020-04-27
相关资源
最近更新 更多