Генераторы статических сайтов (англ. ) — это программные движки, которые используют входные текстовые файлы (такие как Markdown, reStructuredText, AsciiDoc и JSON) для создания статических веб-страниц. В отличие от динамических веб-сайтов, эти статические страницы не изменяются в зависимости от запроса. Это упрощает требования к бэкенду и позволяет распространять сайт через сети доставки контента (CDN). Простая архитектура также затрудняет злоумышленникам модификацию веб-сайта из-за меньшей поверхности атаки этих относительно простых бэкендов. Одними из самых популярных генераторов статических сайтов являются Jekyll, Hugo, Eleventy, Gatsby и Next.js. SSG обычно используются для редко изменяемого, информационного контента, такого как страницы продуктов, новостные статьи, документация к программному обеспечению и блоги.
Архитектура SSG обычно состоят из шаблона, написанного на HTML с использованием системы шаблонов, такой как Liquid (Jekyll) или Go template (Hugo). Та же структура (обычно Git-репозиторий) включает контент в формате простого текста, таком как Markdown или reStructuredText, или в структурном метаформате, таком как JSON или XML. Один текстовый файл может соответствовать одной веб-странице. В качестве альтернативы, один файл со структурными метаданными может соответствовать всему веб-сайту, если используется фреймворк для одностраничных приложений, такой как AngularJS. Настройки переменных сайта хранятся в конфигурационном файле в формате простого текста: _config.yml (YAML), _config.toml (TOML) или _config.json (JSON). Файлы страниц обычно также начинаются с преамбулы (front matter) в формате YAML, TOML или JSON для определения переменных, таких как заголовок, постоянная ссылка или дата. Файлы, имена которых начинаются с подчёркивания (_), например _index.md (в отличие от index.md), считаются шаблонами или архетипами и, таким образом, не рендерятся как отдельные страницы.
Примеры Существование нескольких сотен SSG задокументировано, причём подавляющее большинство написано на языках, уже широко распространённых в вебе, таких как Python, Go, JavaScript и TypeScript.
Название системы Язык Примечания Jekyll Ruby Использует язык шаблонов Liquid. Hugo Go Использует шаблоны Go; его главной особенностью является высокая скорость компиляции. Next.js JavaScript Использует шаблоны React. Pelican Python Использует шаблоны Jinja2. Компилирует HTML из reStructuredText или Markdown.AstroJavaScriptПо умолчанию использует синтаксис (похожий на HTML или JSX). Поддерживает несколько фреймворков: Svelte, React, Preact, Vue.js, SolidJS, Lit, AlpineJS. Компилирует HTML из Markdown или MDX. Docusaurus JavaScript Компилирует HTML из MDX, Markdown, JavaScript и React. Использует Node.js. Кастомизация с помощью React. Eleventy JavaScript Поддерживает 10 языков шаблонов.
Сравнение с серверными системами
Многие серверные системы шаблонов имеют возможность публиковать выходные страницы на сервере, где опубликованные страницы являются статическими. Это распространено в системах управления контентом (CMS), таких как Vignette, но не считается генерацией в том же смысле, что и у SSG. В большинстве случаев эта «опция публикации» не является частью самой системы шаблонов, и она может быть выполнена внешним программным обеспечением, таким как Wget.
Люди начали использовать динамические страницы, генерируемые из шаблонов с помощью уже существовавшего программного обеспечения, адаптированного для этой задачи. Этим ранним ПО были препроцессоры и макроязыки, адаптированные для использования в вебе и работающие через CGI. Позднее появилась простая, но значимая технология — прямое выполнение в модулях-расширениях, начиная с SSI.
Примечания
Ссылки
Enforcing Strict Model–View Separation in Template Engines (англ.)
* Категория:Веб-дизайн Категория:Генераторы статических сайтов