Введение 3
Глава 1. Теория 6
1.1. Статические сайты 6
1.2. Генераторы статических сайтов 10
1.3. Функциональное программирование и язык Elixir 13
Глава 2. Практическая часть 18
2.1. Разработка приложения на Elixir 18
2.2. Тестирование 22
Заключение 25
Список литературы
Самый первый веб-сайт, домашняя страница Тима Биранера-Ли, была статичной. Сайт тогда был в папке HTML-документов, в которые состояли всего лишь из 18 тегов. Браузеры были простыми обозревателями документов, которые брали HTML-документы из сервера и давали конечным пользователям перемещаться по ссылкам. Чем больше браузеры развивались, тем яснее виднелись ограничения статичных сайтов. Так же быстро стало очевидно, что использование HTML и CSS не была достаточна, чтобы хранить содержимое сайта (статьи, товары, галерея, и т.д.) отдельно от дизайна.
Примерно в тоже время, базы данных на SQL-основе широко распространились и многие компании начали использовать базу данных для хранения своего контента.
Уже скоро начали появляться разные способы разработки динамических веб-сайтов. Самыми популярным стал LAMP-стек (Linux, Apache, MySQL, PHP). Веб-сервера стали загружать код в PHP-интерпретатор на лету, а затем открывать соединение с базой данных, отправлять запросы туда и обратно, используя данные в шаблонах и сшивать строки текста в HTML-документ, специально для конкретного пользователя.
Но есть и обратная сторона динамических веб-сайтов. По некоторым подсчетам почти 70% веб-сайтов установленных на основе WordPress уязвимы перед хакерскими атаками. К тому же масштабирование динамического веб-сайта может быть очень дорогостоящим, и агентствам, которые запустили сайт компании, приходиться сильно завышать ресурсы, чтобы сайт не сломался если вдруг он заразился вирусом. Вторая проблема динамических веб-сайтов - это кэширование. По подсчетам даже очень хорошо оптимизированный динамический веб-сайт уступает в скорости загрузки статичной версии сайта почти в шесть раз. Кэширование крайне трудно связать с динамическим веб - сайтом. С веб-сайтом на WordPress, нет никакой гарантии, что тот же URL- адрес не будет возвращать различный HTML в зависимости от того, вошел ли пользователь в систему, или в зависимости от параметров запросов.
Статические веб-сайты принципиально отличаются в этом отношении. Они придерживаются очень простого договора кэширование, любой URL- адрес возвращает один и тот же HTML для любого посетителя.
Взрыв мобильных устройств изменило интернет во многих отношениях. Все больше посетителей приходят на веб-страницы с мобильных устройств. Никогда еще производительность не была так важна как сейчас. По статистике, почти 57% посетителей покидают страницу, если она загружается более 3 секунд. Раньше люди могли ждать больше 10 секунд, но сейчас все изменилось. Люди с мобильными устройствами, где нет многозадачности и нельзя ничего делать пока грузится веб-сайт, часто просто покидают его так и не дождавшись загрузки. И неважно, насколько хорошо вы оптимизировали ваш динамический веб-сайт для производительности, она никогда не даст вам такой же результат, как хорошо настроенный статический веб-сайт, размещенный прямо в CDN за несколько долларов в месяц.
Часто бывают случаи, когда нужно быстро собрать и опубликовать простой статичный сайт, типа блога или сайта визитки с парой страниц. Такие сайты имеют много преимуществ перед динамическими. Например, хорошая кешируемость страниц, быстрая скорость загрузки, минимальное требование к веб-серверу, простой перенос на сервер. Но при разработке возникает проблема дублируемости одинаково кода с одной html страницы на другую. К примеру, шапку, навигацию и подвал. Хочется иметь один шаблон, для всех страниц и постов. Эту проблему решают многие продвинутые веб-фреймворки на различных языках, используя шаблонизаторы, на уровне языка этого фреймворка. Но ради простого сайта нет желания устанавливать и настраивать очередной увесистый фреймворк на сервере. Что бы решить эту проблему, нужен инструмент который бы мог используя один шаблон заполнить все страницы и выдать готовый проект с html страницами, который можно переместить не сервер.
Так целью дипломной работы стала разработка такого инструмента, который мог бы решить все эти проблемы. В данной дипломной работе будет описана разработка инструмента для генерации статических сайтов на функциональном языке Elixir. Этот инструмент предназначен для создания сайтов без базы данных, имеющих статические страницы.
Сегодняшние генераторы статических сайтов сильно отличаются от своих предшественников. Когда Тим Бернерс-Ли запустил первый сайт в всемирную паутину, браузеры были простыми обозревателями HTML Документов, которые могли отобразить гипертекст, ссылки и еще немного всего.
Сегодня, мы, наконец, уходим от старых браузеров. Современные браузеры представляют собой самостоятельную операционную систему, не просто отображающую документы, загруженные из интернета, но и способные запускать полноценные веб-приложения, делая внешние вызовы через API, сохранять данные локально, открывать WebSocket соединения с сервером и даже обрабатывать одноранговые соединения с другими браузерами через WebRTC.
С развитием браузеров, многие функции, которые раньше требовали динамического кода, работающего на сервере, могут быть полностью перенесены на клиента. Сегодня на рынке технологий есть очень много решений почти для любой проблема. Чтобы добавить комментарии на сайт, можно использовать Disqus, Isso или Facebook комментарии. Для социальной интеграции, можно добавить Twitter или Facebook JavaScript виджеты. Чтобы было обновление данных в реальном времени, есть инструмент Firebase. Для чата имеется Olark.
Список можно продолжать долго. Помимо этого, современные веб - приложения, построенные с Ember.js, AngularJS или React, часто полностью развернуты в статический веб-сайт, которые доставляются напрямую из CDN, с чистым API, который разделяется между мобильным клиентом и браузерным.
Можно было бы использовать CDN с динамическими веб-сайтами, но недействительность кэша является одним из тех крайне сложных проблем в области компьютерных наук. Статический сайт, наоборот, легко может быть развернута непосредственно на CDN и подается прямо из локальной кэш-памяти конечному пользователю. Настройка конфигураций по -прежнему занимает некоторое время, и проверка на действительности кэша может быть сложной, но это выполнимо и может быть полностью автоматизировано с помощью таких сервисом как Netlify.
В настоящее время статические сайты становятся актуальны как никогда, поэтому важно знать, как они работают. Перед автором была поставлена цель изучить и разобраться в процессе разработки генератора статических сайтов. На основании полученных знаний было создано библиотека для языка Elixir - генератор статических сайтов. Библиотека имеет самые важные функции для генератора статических сайтов. Все управления командами происходит через командную строку.