Что лучше выбрать для работы с Angular — NGRX, NGXS или Akita?
Angular — фреймворк от компании Google, для создания клиентских приложений. Библиотека Angular — это проект, который не может работать самостоятельно, она должна быть импортирована и использована в приложении.
В статье проведем сравнительную оценку библиотек хранения состояния Angular по удобству использования, по наличию интересных и полезных фич, а также по сложности и скорости изучения этих библиотек с точки зрения среднестатистического angular-разработчика.
Сравнительная таблица трех библиотек
Сходства и отличия библиотек
NGRX остается самой старой, самый популярной библиотекой, самой часто используемой (по сравнению с Акитой и NGXS количество загрузок в разы больше).

Сходства — у всех библиотек:

  • есть дополнительные пакеты с поддержкой ангуляр-роутера, devtools, cli, которые позволяют генерировать код по шаблонам;

  • функционал расширяется дополнительными пакетами, как у NGRX, или плагинами, как у NGXS.

  • есть хорошая понятная документация, начать с ними работать не составляет большого труда и сложности.

Отличие библиотек в основном состоит в подходе к организации кода обработки исключений. Также можно отметить финальный размер бандла, он минимальный у Акиты — 317 КБ.
В целом Akita выигрывает у остальных библиотек по максимально богатому функционалу прямо из коробки. Единственное, что в ней нет — это помощников в тестировании, но они в принципе не особо нужны для Акиты, потому что там мы можем всегда замокать наши сервисы для инвестирования.


В NGXS есть любопытная фича — substate (подсостояние), но нельзя сразу придумать какой-то кейс для его использования. Остальное все есть в Аките даже без установки дополнительных пакетов.

Ангуляр сам по себе достаточно гибок в плане организации хранения состояний:

  • можно использовать уже имеющиеся средства в ангуляре, встроенные;

  • можно и подобрать подходящий инструмент, обеспечивающий сразу же готовое архитектурное решение и иммутабельность данных;

  • помимо этого, мы получаем в свое распоряжение такие удобные и полезные инструменты, как менеджер коллекций, отладчики, роутер-адаптеры и так далее.


Однозначно сложно сказать, стоит ли предпочитать чистый ангуляр использованию библиотек.
Однозначно сложно сказать, стоит ли предпочитать чистый ангуляр использованию библиотек.

_______________________

Это зависит скорее от специфики отдельно взятого проекта:

  • только для организации обычных root вызовов на API, когда мы делаем вызов на бэк, соответственно получаем данные и встраиваем их в компонент приложения, достаточно ангуляра;

  • если же возникает необходимость держать какие-нибудь UI-данные, которые не сохраняются на бэке, или сохраняются отложенно, какие-нибудь фильтры поиска, состояние элементов, открытые или закрытые сайдбары, то тут можно склоняться к использованию стороннего пакета;

  • если нам нужен какой-то специфический функционал, который библиотека может предоставить в готовом виде, например, кэширование Акиты, тогда тоже стоит посмотреть в сторону библиотек.

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

_______________________

Если вам нужно кэширование Акиты, ставьте Акиту.
Не нужно – можете смотреть NGRX или NGXS.
_______________________



NGRX изначально пришел из мира React-a и Redux-a, обладает очень сильно специфичным и отличным от ангуляра подходом. Скорее всего, он будет наиболее удобен опытным react-разработчикам, которые недавно работают или периодически работают на ангуляре.


NGXS по сути продолжает эту философию, но он с успехом ее упрощает, используя средства typescript и ангуляр.

То есть он менее многословный, в нем меньше бойлерплейта, и писать на нём веселее и быстрее.


Наиболее органичной в применении выглядит Akita — ее концепции стора, query, сервиса.


Все библиотеки неплохие, поэтому в конечном итоге при выборе следует отталкиваться от потребности либо какого-то конкретного проекта, либо просто от предпочтений команды.


Детальное сравнение библиотек Angular ищите здесь:

Библиотека NgRx
Библиотека NgXs
Библиотека Akita