Для чего используется SSG (Static Site Generation)?

«Для чего используется SSG (Static Site Generation)?» — вопрос из категории Архитектура, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

**SSG (Static Site Generation)** — это метод, при котором HTML-страницы генерируются во время **сборки (build time)** приложения, а не при каждом запросе пользователя. В контексте **Node.js** это часто реализуется с помощью фреймворков типа **Next.js** или **Gatsby**, где Node.js используется как среда для выполнения инструментов сборки. **Как это работает с Node.js?** 1. Вы пишете код на React/Vue с использованием специальных функций (например, `getStaticProps` в Next.js). 2. Команда сборки (`next build`, `gatsby build`) запускается в **Node.js-окружении**. 3. Node.js-скрипт выполняет все необходимые операции: запрашивает данные с API (вашего Node.js-бэкенда или внешних источников), рендерит React-компоненты в HTML и сохраняет результат как набор статических файлов (HTML, CSS, JS). 4. Эти файлы раздаются через CDN или простой веб-сервер (Nginx). **Пример с Next.js (фреймворк на Node.js):** ```javascript // pages/blog/[slug].js // Эта страница будет сгенерирована статически для каждого поста в блоге. export async function getStaticPaths() { // Вызывается при сборке. Запрашиваем у Node.js API список постов. const res = await fetch('https://my-nodejs-api.com/posts'); const posts = await res.json(); const paths = posts.map(post => ({ params: { slug: post.slug }, })); return { paths, fallback: false }; } export async function getStaticProps({ params }) { // Вызывается при сборке для каждого пути. Запрашиваем данные конкретного поста. const res = await fetch(`https://my-nodejs-api.com/posts/${params.slug}`); const post = await res.json(); return { props: { post } }; // Данные передаются в компонент Page при сборке } function BlogPost({ post }) { // Компонент получает готовые данные return (

{post.title}

); } export default BlogPost; ``` **Преимущества SSG для проектов на Node.js:** * **Максимальная производительность:** Готовый HTML отдается мгновенно с CDN. * **Идеально для SEO:** Поисковые боты получают полностью сформированный контент. * **Высокая безопасность и стабильность:** Нет рантайм-сервера БД или сложной логики, подверженной ошибкам. * **Низкая стоимость хостинга:** Статические файлы можно хостить на S3, Netlify, Vercel. **Когда использовать SSG в Node.js-проектах:** * Маркетинговые сайты, лендинги. * Блоги, документация, портфолио. * Любой контент, который меняется нечасто и может быть получен на этапе сборки.