Содержание статьи
Возврат к истокам
Правильно ведь говорят: «Все новое — хорошо забытое старое». Вот я помню, как много лет назад в блокноте создавал свой первый index.html и заливал на тогда популярный хостинг GeoCities.com. Позже стало ясно, что из статических страничек можно слепить разве что домашнюю страничку, — для чего-то более серьезного нужны Perl и CGI. Теперь, когда есть миллион способов создавать динамические страницы, разработчики, наоборот, стали часто стремиться к «статике», особенно в высоконагруженных местах. Оно и понятно: нет никаких оверхедов на генерацию контента (страница уже готова), при этом все страницы разом легко кешируются (помещаются в память для моментальной отдачи клиенту). Но это история не только про высоконагруженные системы, но и про обычные сайты. Популярный сейчас тренд — движки для генерации статического контента. С их помощью можно создавать довольно сложные сайты, получая в конечном итоге набор статических файлов, которые можно легко захостить где угодно: хоть на Amazon S3, хоть даже на GitHub. Не нужно возиться с настройкой сервера, при этом сайт получается бронебойным (попробуй сломать ресурс из статических файлов).
Как это работает?
Общий принцип работы таких движков простой. Есть директория с шаблонами, в которых с использованием шаблонизатора задается верстка будущих страниц. И есть директория с контентом для сайта: как правило, это набор текстовых файлов, размеченных с помощью Markdown. Что делает генератор статического контента? Берет файлы из директории с контентом, применяет к ним шаблоны из директории с темплейтами и на выходе выдает набор статических HTML-ек, которые можно загрузить на сервер.
Возьмем для примера блог. Новый пост оформляется в виде отдельного Markdown-файла. После любого обновления нужно запустить движок, который генерирует статические HTML-файлы. Далее полученные исходники сайта загружаются на хостинг. Многие движки берут развертывание сайта на себя, поэтому все, что требуется для обновления, — это создать файл с содержанием нового поста для блога.
Какие бывают генераторы?
Один из самых известных генераторов статического контента — это блогерский движок Octopress, который я и попробовал в действии. Помимо него, также популярны jekyll, Nesta CMS. Всех их объединяет одно — они написаны на Ruby. Есть реализации на Node.JS (например, Punch, есть и на Python (Hyde). Все они используют один и тот же принцип, но отличаются в деталях: поддержке разных шаблонизаторов, используемой разметке исходных данных и так далее.
Куда развернуть?
Нет смысла показывать, как запустить пару команд генератора. У каждого из движков есть инструкции, как за пять минут сгенерировать статический сайт. Интересно другое — как использовать преимущества того, что мы отказываемся от динамики. Где разместить такой сайт? Чаще всего используется три варианта:
Одна из фишек GitHub’а — возможность создавать странички (Github Pages) для разработчиков, которые используют сервис для хранения репозиториев кода. Если выбрать этот бесплатный вариант, то все файлы сайта будут храниться прямо в Git-репозитории. Это очень удобно, поскольку читатели могут предложить свои Pull Request’ы и таким образом, к примеру, помогать исправлять ошибки. При этом сайт ты можешь привязать к своему домену.
S3 — это бронебойное хранилище для файлов от Amazon. Так как все файлы сайта весят ничтожно мало, а трафика, скорее всего, будет немного, на хостинг не потребуется много денег. Зато его 99,9%-я доступность практически гарантирована.
Heroku — еще одна облачная платформа, разработанная для быстрого развертывания веб-приложений (на Python, Ruby, Scala, Java и прочем). В случае со статическим сайтом использовать ее можно бесплатно.
Добавить динамики
Надо понимать, что любой статической странице сегодня легко можно добавить динамики через AJAX. Взять опять же блог, реализованный с помощью генератора статического контента. Без комментариев это, увы, не блог. Однако комментарии элементарно подключаются с помощью стороннего сервиса вроде Disqus, Livefyre, IntenseDebate. Благодаря таким инструментам подход к созданию сайтов с генерацией статических страниц приобретает еще больший смысл.