Какие основные архитектурные подходы к построению фронтенд-приложений?

«Какие основные архитектурные подходы к построению фронтенд-приложений?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Фронтенд-приложения можно классифицировать по четырем основным архитектурным подходам:

1. Монолитная архитектура (Monolith) Фронтенд и бэкенд тесно связаны, рендеринг происходит на сервере.

  • Технологии: Django, Ruby on Rails с server-side шаблонами.
  • Пример (Django):
    # views.py
    from django.shortcuts import render
    def home(request):
        data = get_data_from_db()
        return render(request, 'home.html', {'data': data})
  • Плюсы: Простота развертывания, хороший SEO из коробки.
  • Минусы: Слабая связность, сложность масштабирования.

2. Одностраничное приложение (SPA - Single Page Application) Все приложение загружается один раз, дальнейшая работа происходит на клиенте через API.

  • Технологии: React, Vue.js, Angular.
  • Пример (React с fetch):
    function App() {
      const [data, setData] = useState([]);
      useEffect(() => {
        fetch('/api/data').then(r => r.json()).then(setData);
      }, []);
      return <div>{data.map(item => <p key={item.id}>{item.name}</p>)}</div>;
    }
  • Плюсы: Быстрый и плавный UI после загрузки.
  • Минусы: Сложности с SEO, долгая первоначальная загрузка.

3. Серверный рендеринг (SSR - Server-Side Rendering) Страницы рендерятся на сервере для каждой загрузки, но приложение остается интерактивным как SPA.

  • Технологии: Next.js (React), Nuxt.js (Vue).
  • Плюсы: Отличный SEO и скорость первой отрисовки (FCP).
  • Минусы: Усложнение серверной инфраструктуры.

4. Микрофронтенды (Microfrontends) Приложение разбито на независимые, автономные части, которые могут разрабатываться и деплоиться отдельно.

  • Подходы: Webpack Module Federation, iframe, отдельные поддомены.
  • Плюсы: Независимость команд, изоляция кода, возможность использовать разные технологии.
  • Минусы: Сложность координации, увеличение размера бандла, согласованность UI/UX.

Критерии выбора: Масштаб проекта, требования к SEO, состав и опыт команд, необходимость в изоляции функциональности.