# Статические сайты. Деградация или новый тренд?🤔

Обложка статьи "Статические сайты. Деградация или новый тренд?"

В последнее время в нашу жизнь незаметно возвращаются статические сайты.

Давайте попробуем отмотать пленку назад во времена динозавров и зарождения веба, чтобы разобраться, как он развивался, какие проблемы появлялись в процессе и как они решались. Разберемся, что такое статические сайты, имеют ли они место быть сегодня, добро это или же зло.

В статье не будет рецептов того, как создать статический сайт. Это статья-размышление о том, как мы вообще оказались в той точке и в том состоянии, в котором мы видим привычный нам всем Интернет сейчас.

WARNING

Осторожно, длиннопост. Чтение может вызвать внезапный приступ скуки 😃

# Что такое статические и динамические сайты?

Цель нашего путешествия в прошлое - разобраться, что такое статические сайты, хорошо это или плохо? Давайте начнем наше путешествие в прошлое с небольшого ликбеза, мы ведь должны четко понимать, что мы исследуем 😃

# Статические сайты

Итак, теоретически, статика - это очень просто. Статическим считается сайт, который в сущности является набором заранее подготовленных HTML-файлов, которые просто написаны чьими-то ручками и бережно загружены куда-нибудь на сервер.

Давайте попробуем погуглить, чтобы выяснить, какое определение даст Википедия:

Статический сайт — сайт, состоящий из статичных html (htm, dhtml, xhtml) страниц, составляющих единое целое. Содержит в себе (в виде HTML-размеченных) текст, изображения, мультимедиа содержимое (аудио, видео) и HTML-теги. Теги бывают как служебные, предназначенные для обозревателя, так и предназначенные для размещения, формирования внешнего вида и отображения информации. Все изменения на сайт вносятся в исходный код документов (страниц) сайта, для чего необходимо иметь доступ к файлам на веб сервере.

То есть, выыходит, если вы создадите на своем компьютере HTML-файл, то как раз получите тот самый статический сайт.

Важно понимать

Cайт по-прежнему останется статическим, даже если вы приправите его JavaScript для большей интерактивности. Главный критерий - отсутствие серверной логики.

# Динамические сайты

С динамическими сайтами дела обстоят иначе. Давайте сразу обратимся к Википедии за определением.

Динамический сайт — сайт, состоящий из динамичных страниц — шаблонов, контента, скриптов и прочего, в большинстве случаев в виде отдельных файлов. Страница сайта, показываемая в итоге браузеру пользователя, формируется на стороне сервера динамически, по запросу, из страницы-шаблона и отдельно хранимого содержимого (информации, скриптов и др.). Как правило, для отображения любого количества однотипных страниц используется одна страница-шаблон, в которую подгружается соответствующее содержимое, это позволяет единомоментно корректировать внешний вид сайта (множество всех его страниц), редактируя всего лишь один шаблон.

Получается, что динамические сайты в противоположность статическим не имеют заранее подготовленных страниц, хранящихся на сервере. Вместо этого на сервере отдельно хранятся чистые данные и алгоритм, который знает, как из этих самых данных собрать любую страницу сайта "на лету".

Каждый раз, когда вы посещаете очередную страницу такого сайта, где-то далеко в Магадане (или где-нибудь еще) сервер мгновенно генерирует HTML-код конечной страницы, которую вы через мгновение увидите на экране, часто дополнительно учитывая различные индивидуальные для каждого пользователя параметры.

Вы как пользователь даже не замечаете этот процесс, ведь длится он не более нескольких миллисекунд, однако именно эта технология позволяет реализовать такие привычные нам функции, как личный кабинет пользователя, комментарии, сообщения и т.п., ведь именно так собирается индивидуальное содержимое, для каждого отдельно взятого пользователя.

Например на странице личного кабинета серверная логика будет подставлять в заранее подготовленный шаблон именно ту информацию, которую указали при регистрации именно вы, а не кто-то другой. На странице блога вы можете видеть дополнительные ссылки для удаления или редактирования комментариев, которые написали вы. Все это происходит именно потому что сервер узнал вас в момент обращения, собрал для вас именно вашу версию конечной страницы и отдал её в качестве ответа.

# Вместо резюме

Казалось бы, динамические сайты гораздо функциональнее и явно выглядят более выигрышно по сравнению со статическими. Однако, не все так просто, но обо всем по порядку.

# Ретроспектива

Прежде, чем ответить на вопрос, является ли глобальный тренд перехода на статику деградацией, давайте сначала разберемся, что в том, как развивались события с самого начала всемирной паутины.

# Вначале была статика

Абсолютно очевидно, что всемирная паутина начиналась со статических сайтов. На заре веба сама по себе идея гипертекста была революционной. Заключалась она в том, что в сети выкладываются документы, на тот момент сугубо научного содержания, связанные гиперссылками, с помощью которых навигация по всему пулу документов, доступных в сети становится значительно удобнее.

Понятно, что в то далекое (на самом деле не очень) время этой функциональности было более чем достаточно, ведь научное сообщество — не очень-то прихотливый клиент, а пользователями интернета и веба в частности тогда были именно научные институты и пентагон.

Примерно в то же время начинают активно набирать обороты коммерческие организации, предоставляющие услугу доступа в интернет для всех желающих. Интернет наполняется рядовыми пользователями. Появляется потребность в удобстве и более богатой функциональности. Наступает эра динамических сайтов.

# Рассвет динамики или как WordPress захватил мир

Так как вебом теперь пользуются обычные люди для удовлетворения своих бытовых потребностей, а аудитория его стремительно растет, появляется потребность в новой функциональности. Например, в e-commerce есть потребность в заказе товаров прямо на сайте, ведь это значительно удобнее, чем пользоваться сайтом исключительно, как каталогом.

Да и сайты-каталоги на самом деле не так уж просты, ведь для того, чтобы поддерживать их в актуальном состоянии нужен штатный высококвалифицированный технически подкованный специалист, который умеет верстать и изменять HTML-документы на уровне кода.

Как логическое продолжение рождаются различные решения, которые позволяют на стороне сервера выполнять определенную логику (сейчас это называют backend), что в итоге превращает сайт в полноценное приложение вместо простого набора контентных страниц.

Появляются технологии, позволяющие обрабатывать запросы и на основании переданной информации собирать код результирующей страницы с использованием программ, написанных на любых уже существующих языках (cgi). Далее появляются языки, специально предназначенные для этого, например, PHP.

Однако, создавать такие серверные программы по-прежнему является уделом профессионалов - это сложно и дорого. Поэтому следующим логичным этапом развития технологий становится появление CMS - систем управления контентом.

Что такое CMS?

CMS (Content Management System) - это универсальный движок, устанавливаемый на сервере, который представляет собой уже написанную серверную логику, собирающую страницы "на лету" и предоставляющую готовые решения для наиболее востребованных функций.

Теперь мир надолго погружается в эру, когда создание сайта заключается в основном в том, чтобы развернуть на сервере CMS, "натянуть" на нее фирменный шаблон, в который будет подставляться контент, или выбрать себе шаблон из уже существующих, подключить необходимые плагины, чтобы снабдить сайт необходимой функциональностью, например, комментарии или корзина покупателя и все, сайт готов.

Кстати, администрировать такой сайт может даже человек далекий от программирования, т.к. все распространенные CMS предоставляют специальную админ-панель, где вы можете изменять, удалять или добавлять новые страницы на сайт, используя простой графический интерфейс. Теперь работа по созданияю или редактированию содержимого страницы не требует от вас знания HTML, вы редактируете содержимое в удобном WYSIWYG-редакторе, а это, к слову, не сложнее, чем создать документ с использованием Microsoft Office Word.

Самой популярной (но далеко не самой лучшей, имхо) такой CMS-системой становится всем известный WordPress. Из-за своей относительной простоты и отсутствия более или менее серьёзных альтернатив на первых порах WordPress становится движком почти для всего интернета. Несмотря на то, что это CMS изначально созданная для ведения персональных блогов, ее начинают "докручивать" до собственных нужд и использовать для всего, начиная с рекламных посадочных страниц, заканчивая огромными корпоративными порталами и интернет-магазинами.

# Что не так с динамическими сайтами?

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

# 1. Скорость!

В случае со статическими сайтами сервер на любой запрос пользователя находит соответствующий файл и отдает его. Динамический сайт в это время обрабатывает запросы, выполняя определенную логику, делает обращения к базе данных, собирает результирующую страницу из нескольких файлов + данные из базы данных.

Легко догадаться, что в случае со статическими сайтами скорость отклика сервера значительно выше.

Важно понимать

В современном мире CMS научились кэшировать страницы, приближая результат к статическим сайтам. При каждом запросе они проверяют, нет ли у них в памяти уже готовой подходящей страницы, если есть, она сразу отдается в качестве ответа и только если её кэша пока не существует, выполняется вся та логика, которая описана выше. Это действительно повышает скорость, но она по-прежнему ниже, чем у статики.

# 2. Уязвимость к DDoS-атакам

Что такое DDoS?

DDoS - это вид атак, при которых на ваш сервер с помощью огромного количества зараженных компьютеров отправляется просто колоссальное количество запросов. В момент, когда сервер перестает справляться с нагрузкой, сайт начинает тормозить, а затем и вовсе "падает".

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

# 3. Безопасность

В мире существует ограниченное количество CMS и большая часть сайтов, использующих CMS, сделана на 2-5 наиболее используемых из них. Проблема в том, что у любой CMS есть уязвимости, а значит, что для взлома сайтов построенных с их помощью достаточно найти уязвимость в самой CMS. Дальше у злоумышленника есть ключик к миллионам сайтов.

Даже если динамический сайт не использует открытую популярную CMS и его серверная логика уникальна и написана "с нуля", она все равно остается программой, исполняемой на сервере, а значит в ее работу потенциально можно вмешаться.

Важно понимать

У статических же сайтов нет никакой серверной логики, а значит и потенциальных возможностей для его взлома через backend просто нет и не может быть.

# 4. Требовательность к серверу

Динамический сайт - это всегда сложная система из нескольких компонентов, каждый из которых накладывает свои ограничения на сервер, на котором вы планируете хостить сайт. Например, динамический сайт никогда не обходится без базы данных и среды выполнения языка, на котором написан backend (серверная логика)

Статическому же сайту не нужно ничего кроме базового ПО веб-сервера. По этой причине хостинг статических сайтов в среднем обходится значительно дешевле, чем динамических (часто для некоммерческого использования хостинг статического сайта вообще бесплатен, например на GitHub Pages)

# Недостатки статических сайтов

После перечисления недостатков динамических сайтов было бы совершенно нечестно умолчать о недостатках их статических собратьев. Давайте разберёмся, что не так со статическими сайтами.

# 1. Ограниченная функциональность

Да, это правда, ведь статический сайт - это всего лишь набор HTML-файлов, а значит на сервере нельзя развернуть никакую дополнительную логику для хранения и обработки пользовательской информации.

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

# 2. Сложность администрирования

Чаще всего администрирование статического сайта требует от вас большего технического бекграунда, чем администрирование динамического сайта через админ-панель.

Причиной является то, как устроен статический сайт. В самом простом случае вам придется редактировать исходный код HTML-файлов и вручную следить за обновлением страниц-каталогов (например страница со списком статей блога) или навигацией при добавлении или удалении страниц сайта.

Даже в случае использования генератора статических сайтов (рассматриваются ниже), обычно необходимы технические знания, например, контент часто пишется не в WYSIWYG-редакторе, а в обычном текстовом редакторе с использованием языка разметки Markdown.

# Генераторы статических сайтов

В предыдущем пункте было сказано о сложности администрирования статических сайтов, однако, в наше время эта проблема не столь актуальна, ведь для сборки статических сайтов существует большое количество программных решений, например Jekyll, MiddleMan, Octopres, Vuepress (этот блог сгенерирован именно им) и многие другие.

Эти генераторы статических сайтов позволяют вам, например, использовать шаблоны страниц, чтобы не править код каждой страницы вручную при каких-то глобальных изменениях так же, как если бы вы построили сайт на CMS. Разница лишь в том, что абсолютно все страницы сайта собираются не в момент поступления запроса от пользователя, а в момент сборки на вашем компьютере, то есть перед выкладыванием сайта на сервер.

# Пара слов про Git

Разработчики во всем мире уже давно привыкли и всей душой полюбили систему управления версиями Git. Этому есть огромное количество причин, ведь Git повышает надежность процесса разработки, дает полную историю изменения файлов с момента их создания, система распределения прав, ветви и механизмы их слияния. Всё это защищает вас от неправильных изменений, а также дает возможность безопасно работать с одной кодовой базой неограниченному количеству разработчиков.

Так почему бы не применять эту мощную и удобную систему для управления контентом? В случае со статическими сайтами это возможно, ведь контент хранится не в базе данных, а в файлах, являющихся частью проекта, а значит отслеживаемых Git'ом точно так же, как и код.

Отсюда можно сделать вывод, что обыкновенный репозиторий на GitHub может играть роль весьма функциональной и убедительной CMS. Если вы правильно настроите непрерывное развертывание, всё, что вы запушили в репозиторий проекта будет сразу же отображаться в production. Звучит многообещающе, правда?

# Заключение

Статические и динамические сайты - это два кардинально разных подхода. Нельзя сказать глобально, что один из них лучше, чем другой. У каждого из подходов есть как плюсы, так и минусы, которые часто являются критическими и непреодолимыми. Важно понимать, что статические сайты ни в коем случае не панацея, они имеют довольно ограниченную область применения.

Подходит ли мне статика?

Если вам предстоит разрабатывать сайт, определитесь с тем, достаточно ли вам функциональности статических сайтов, если да, то смело берите эту технологию на вооружение, ведь статический блог или статический сайт-визитка будет значительно быстрее и безопаснее своего аналога с использованием CMS, самописного движка или backend-фреймворка.

Для каждой задачи есть свой инструмент, не стреляйте из пушки по воробьям! 🙂

# Комментарии