В чем разница микрофронтов и единого фронтенда
Что проверяют
Умеете ли вы выбирать архитектуру под организацию, а не под моду. Микрофронтенды решают прежде всего проблему нескольких команд, которые мешают друг другу релизиться, а не техническую. Следом спрашивают, как бы вы собрали микрофронты вместе и чем за это платят.
Как отвечать
Единый фронтенд это одно приложение с одной сборкой и одним релизом. Внутри он может быть хорошо модульным: монорепозиторий на Nx или Turborepo, границы между доменами через правила линтера, ленивые чанки на каждый раздел. Такой модульный монолит закрывает большинство проблем с размером кода.
Микрофронтенды это несколько приложений, которые разрабатываются и деплоятся независимо, а собираются в одну страницу уже при загрузке. Способы сборки:
- Module Federation: хост подгружает удалённые модули в рантайме и делит с ними общие зависимости вроде React;
- single-spa: оркестратор, который монтирует приложения по маршруту;
- Web Components: каждая команда отдаёт кастомный элемент, внешний контракт это атрибуты и события;
- серверная или edge-композиция: страница собирается из фрагментов на сервере;
- iframe: полная изоляция, но проблемы с роутингом, размерами и доступностью.
Цена: дублирование зависимостей и рост бандла, поддержка общей дизайн-системы и совместимых версий библиотек, сквозная авторизация и состояние, e2e-тесты поверх нескольких деплоев, мониторинг ошибок из нескольких источников. Выигрыш появляется, когда команд несколько, у них разный релизный цикл и чёткие доменные границы. Сильный ответ звучит так: «начал бы с модульного монолита и выносил домен в отдельный микрофронт, только когда общий релиз реально тормозит команду».
Где спотыкаются
Называют «разные фреймворки в разных модулях» главным плюсом. На практике это минус: два рантайма на странице и невозможность переиспользовать компоненты.
Говорят, что монолит медленный из-за размера кода. Объём загружаемого кода решает code splitting, а микрофронты при неаккуратных shared-зависимостях как раз грузят больше.
Не думают о границах. Если два микрофронта постоянно правятся вместе в одной задаче, они разрезаны не по домену, и независимого деплоя всё равно не будет.