Возврат к истокам

Правильно ведь говорят: «Все новое — хорошо забытое старое». Вот я помню, как много лет назад в блокноте создавал свой первый index.html и заливал на тогда популярный хостинг GeoCities.com. Позже стало ясно, что из статических страничек можно слепить разве что домашнюю страничку, — для чего-то более серьезного нужны Perl и CGI. Теперь, когда есть миллион способов создавать динамические страницы, разработчики, наоборот, стали часто стремиться к «статике», особенно в высоконагруженных местах. Оно и понятно: нет никаких оверхедов на генерацию контента (страница уже готова), при этом все страницы разом легко кешируются (помещаются в память для моментальной отдачи клиенту). Но это история не только про высоконагруженные системы, но и про обычные сайты. Популярный сейчас тренд — движки для генерации статического контента. С их помощью можно создавать довольно сложные сайты, получая в конечном итоге набор статических файлов, которые можно легко захостить где угодно: хоть на Amazon S3, хоть даже на GitHub. Не нужно возиться с настройкой сервера, при этом сайт получается бронебойным (попробуй сломать ресурс из статических файлов).

 

Как это работает?

Общий принцип работы таких движков простой. Есть директория с шаблонами, в которых с использованием шаблонизатора задается верстка будущих страниц. И есть директория с контентом для сайта: как правило, это набор текстовых файлов, размеченных с помощью Markdown. Что делает генератор статического контента? Берет файлы из директории с контентом, применяет к ним шаблоны из директории с темплейтами и на выходе выдает набор статических HTML-ек, которые можно загрузить на сервер.

Возьмем для примера блог. Новый пост оформляется в виде отдельного Markdown-файла. После любого обновления нужно запустить движок, который генерирует статические HTML-файлы. Далее полученные исходники сайта загружаются на хостинг. Многие движки берут развертывание сайта на себя, поэтому все, что требуется для обновления, — это создать файл с содержанием нового поста для блога.

 

Какие бывают генераторы?

Один из самых известных генераторов статического контента — это блогерский движок Octopress, который я и попробовал в действии. Помимо него, также популярны jekyll, Nesta CMS. Всех их объединяет одно — они написаны на Ruby. Есть реализации на Node.JS (например, Punch, есть и на Python (Hyde). Все они используют один и тот же принцип, но отличаются в деталях: поддержке разных шаблонизаторов, используемой разметке исходных данных и так далее.

О статических генераторах контента многие узнали благодаря Octopress
О статических генераторах контента многие узнали благодаря Octopress
 

Куда развернуть?

Нет смысла показывать, как запустить пару команд генератора. У каждого из движков есть инструкции, как за пять минут сгенерировать статический сайт. Интересно другое — как использовать преимущества того, что мы отказываемся от динамики. Где разместить такой сайт? Чаще всего используется три варианта:

Одна из фишек GitHub’а — возможность создавать странички (Github Pages) для разработчиков, которые используют сервис для хранения репозиториев кода. Если выбрать этот бесплатный вариант, то все файлы сайта будут храниться прямо в Git-репозитории. Это очень удобно, поскольку читатели могут предложить свои Pull Request’ы и таким образом, к примеру, помогать исправлять ошибки. При этом сайт ты можешь привязать к своему домену.

S3 — это бронебойное хранилище для файлов от Amazon. Так как все файлы сайта весят ничтожно мало, а трафика, скорее всего, будет немного, на хостинг не потребуется много денег. Зато его 99,9%-я доступность практически гарантирована.

Heroku — еще одна облачная платформа, разработанная для быстрого развертывания веб-приложений (на Python, Ruby, Scala, Java и прочем). В случае со статическим сайтом использовать ее можно бесплатно.

Интересная PaaS-платформа для супербыстрого развертывания веб-приложений
Интересная PaaS-платформа для супербыстрого развертывания веб-приложений
 

Добавить динамики

Надо понимать, что любой статической странице сегодня легко можно добавить динамики через AJAX. Взять опять же блог, реализованный с помощью генератора статического контента. Без комментариев это, увы, не блог. Однако комментарии элементарно подключаются с помощью стороннего сервиса вроде Disqus, Livefyre, IntenseDebate. Благодаря таким инструментам подход к созданию сайтов с генерацией статических страниц приобретает еще больший смысл.

Степа Ильин

Главный редактор «Хакера» с 2012 по начало 2014 года. Сейчас с командой единомышленников строит компанию Wallarm, разрабатывающую решения для защиты веб-приложений от хакерских атак и обнаружения в них уязвимостей.

Теги:

3 комментария

  1. 01.10.2014 at 06:55

    а как же старый добрый MovableType? там много статики генерится при создании страниц и прочего. писаный на Perl.

  2. 01.10.2014 at 16:44

    Вы, похоже, ошиблись — правильнее будет «Генератор статических сайтов».

  3. 07.02.2015 at 04:16

    Круто, блин! Интересно попробовать.
    Я так понимаю что безопасность при этом действительно бронебойная. Сайт невзламываем, т.к. ломать нечего.

Оставить мнение

Check Also

Задачи на собеседованиях. Задачи от компании Abbyy

Вопросы на собеседовании в стиле «почему крышка от канализационного люка круглая?» — это с…