Почему кинжал считается лучшим в реализации AWS лямбда, чем Guice? - PullRequest
1 голос
/ 02 мая 2019

Я знаю, что кинжал создает инъекцию во время компиляции, генерируя код, и, следовательно, его производительность лучше, чем у Guice, который делает это во время выполнения.Но, что касается случая лямбды, я вижу, что во многих местах упоминается, что Кинжал является предпочтительным.Это из-за проблемы холодного старта?

Из-за проблемы холодного запуска в лямбде, лямбда продолжает делать самозагрузку несколько раз, когда получает запрос после долгого времени.Итак, с кинжалом, самозагрузка будет намного быстрее по сравнению с Guice, поскольку у него уже есть сгенерированный код?Я говорю, что все объекты в Guice также создаются во время начальной загрузки по сравнению с отложенной загрузкой.

1 Ответ

3 голосов
/ 04 июня 2019

Как вы уже знаете, любая инфраструктура внедрения зависимостей в какой-то момент должна построить своего рода граф зависимостей объектов, которые требуются вашему приложению.Построение этого графа часто является наиболее дорогостоящей частью структуры DI.

Guice вычисляет этот график, используя отражение во время выполнения.Dagger генерирует код, который представляет граф зависимостей во время компиляции.Я не знаю, какой из них быстрее, но я знаю, что использование отражения вызывает нетривиальный удар по производительности.

Однако самое большое отличие состоит в том, что Dagger выполняет всю тяжелую работу во время компиляции (что означаетвы выполняете работу один раз, независимо от того, сколько раз вы ее выполняете), тогда как Guice должен выполнять эквивалентную работу каждый раз при запуске приложения.

Теперь, чтобы ответить на ваш вопрос, предпочтительнее использовать Dagger, если ваше приложение часто запускается и останавливается.С чем-то вроде мобильного приложения, более медленное время запуска в основном просто ухудшает UX.С Lambda не только он замедляет время холодного запуска, но и поскольку вы оплачиваете количество времени, в течение которого работает ваш код, на самом деле это будет стоить вам больше денег, чтобы постоянно перестраивать граф зависимостей.

TLDR; В Lambda предпочтительнее использовать Dagger (как для времени холодного запуска, так и для стоимости), поскольку он перемещает самую дорогую часть инфраструктуры DI для компиляции, а не во время выполнения,

...