Skip to content

Micro vs Macro Frontends

nin-jin edited this page May 9, 2020 · 4 revisions

Макрофронтенд

Когда вся интеграция на уровне сборщика, внутри бандла.

Плюсы

  1. Высокая степень взаимной интеграции.
  2. Простая инфраструктура.
  3. Статическая проверка типов на стыке приложений.
  4. Воспроизводимость билдов - все можно собрать на одной машине за один проход.
  5. Минимизация суммарного объёма так как код максимально переиспользуется.

Минусы

  1. Необходимость придерживаться всем разработчикам макро-проекта более строгих правил и в частности делать каждую часть на своей технологии.
  2. Более сложное кэширование разных частей билдов (tsc --build)
  3. Долгий холодный билд (если вам нужно собрать имеенно master-приложение со всеми страницами)

Микрофронтенды

Когда более-менее крупные и цельные части функциональности собираются раздельно и выделяются в отдельные файлы

Плюсы

  1. Возможность независимого кэширования чанков.
  2. В условиях разнородных команд, подходов, стеков, можно зафиксить версии и разрабатывать в своем болоте, а потом встроить компонент в большое приложение и он ничего не сломает.
  3. Когда куча копипасты (любой современный UI) и надо ускорить загрузку большого бандла, подробив на чанки. Есть шанс, что с момента последнего посещения сайта проекта, браузерный кэш с чанками микросервисов не вытеснится другими ресурсами.

Минусы

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

  2. Усложняется инфраструктура. Шарить код сложнее: нужны хитрые загрузчики в рантайме, контроль целостности, обработка ошибок. Ухудшается отказоустойчивость, проблемы с cdn сложнее контролировать, чем свое болото

  3. Сложнее воспроизвести сборку. Нельзя гарантировать одинаковость версий в разных частях приложения, например, 2 разные версии реакта (на ssr-сервере из node_modules, а на клиенте из cdn) приводят к тому, что компоненты из разных версий могут просачиваться друг в друга, что приводит к сложноуловимым багам

  4. Сложнее отлаживать - приходится библиотеку локально вкомпиливать в бандл или поднимать подобие cdn, что не гарантирует воспроизводимость на тесте или проде.

  5. Стагнация версий - т.к. все изолированно, то по-принципу "работает - не трогай" версии не меняют. Что приводит к дублированию библиотек и усложнению обновления версий, когда "припрет".