Оптимизация блога

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

Первый совет заключался в более агрессивном уменьшении разрешения и качества изображений.

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

Подробнее ознакомившись с этой темой, решил ещё поэкспериментировать с размерами и дописать скрипт, чтобы все варианты размеров генерировал автоматически. И желательно ещё автоматизировать указание размеров в самой разметке страницы. «Но потом, не сейчас»

Второй совет заключался в использовании модуля PageSpeed для Nginx.

Для того, чтобы не засорять систему разнообразными пакетами программ и библиотек, я все веб-сервисы на своём сервере запускаю в виде докер-контейнеров. Найти образ контейнера с Nginx и этим модулем на первый взгляд показалось пустяковым делом — обычно полезные вещи уже есть в репозиториях популярных дистрибутивов линукс или в виде готовых контейнеров. Однако, готового пакета для стандартного базового дистрибутива Alpine Linux не нашёл. Не особо удивился, потому что дистрибутив в последнее время достаточно популярный, но только как база для образов Докера и всяких микрокомпьютеров. А вот отсутствие готового ПО для CentOS и Debian удивило. Тем не менее, нашлось изрядное количество образов на гитхабе.

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

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