Ускорение сайта с помощью mod_pagespeed от Google
Приветствую вас, друзья! Сегодня я хочу продолжить предыдущую тему по ускорению сайта. На этот раз я расскажу вам про новую разработку компании Google. А именно, про модуль mod_pagespeed для сервера Apache.
Не так давно, всеми известный Google анонсировал новый модуль для apache, который по их заявлениям увеличивает скорость загрузки сайта на 50%. Честно сказать у себя на блоге я разницу не заметил, так как блог грузится и так очень быстро – «быстрее некуда». Но я не остановился для тестирования mod_pagespeed только на своем блоге. Я решил установить этот модуль еще и на блог своего друга — Сергея Сосновского, у которого просто туча плагинов для wordpress установлено, и блог грузится около 1.5 секунд.
После установки mod_pagespeed, скорость загрузки его блога увеличилась на 50-60%, и равняется 0.6 – 0.7 сек. Думаю не плохой результат, так как помимо увеличения скорости загрузки, все javascript скрипты и css стили сжимаются до невероятных размеров, и превращаются на выходе в один файл для javascript и css соответственно. Так что смело можно заявлять, что ускорение сайта с помощью нового модуля для apache от google дает неплохие результаты.
Теперь я непосредственно расскажу вам о том, что именно делает данный модуль с сайтом.
Возможности mod_pagespeed:
- Добавление задержки при загрузке сайта, на стороне клиента.
- Улучшение кэширование страниц.
- Удаление ненужных (лишних) пробелов в html коде.
- Объединение нескольких css файлов в один.
- Объединение нескольких html тегов head в один.
- Перемещение css стилей в html тег head.
- Удаление ненужных атрибутов в тегах html документа.
- Перемещение маленьких css стилей в html документ.
- Перемещение больших css стилей из html документа в css файл.
- Перемещение маленьких javascript скриптов в html документ.
- Перемещение больших javascript скриптов из html документа в javascript файл.
- Удаление ненужных кавычек из тегов html документа.
- Удаление html комментариев.
- Сжатие и компрессия изображений.
- Очищение css стилей от комментариев, пробелов и сокращение названий цветов.
- Очищение javascript скриптов от комментариев и пробелов.
- Добавление тега head в html документ при его отсутствии.
- Удаление сценариев из html документа.
Как видите, возможностей у данного модуля много, и все они заменяют работу обычных скриптов для разгрузки системы. Теперь, когда я вас ознакомил со всеми возможностями, мы можем перейти к установке этого модуля на vps, vds под управлением Ubuntu, Debian.
Загружаем программу для доступа к серверу по ssh протоколу. Для этого я пользуюсь программой Putty, суть и пример работы, с которой я описывал в статье про установку ispmanager. После подключения к серверу, нам нужно прописать команду для скачивания и установки модуля на apache.
Пишем в терминале следующие команды (после каждой команды жмем enter).
Для 32-х битных систем:
cd ~ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.deb
Для 64-х битных систем:
cd ~ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb
После выполнения этих команд, которые скачивают дистрибутив модуля на сервер, мы переходим к его установке.
Пишем в терминале следующую команду:
sudo dpkg -i mod-pagespeed*.deb
В процессе установки, может понадобиться нажать кнопку «Y» – это согласие на установку пакета и проведение необходимых стандартных настроек.
Теперь, начинается самое интересное. Мы будем настраивать конфигурационный файл модуля так, как захотим.
Конфигурационный файл модуля расположен тут:
/etc/apache2/mods-available/pagespeed.conf
Скачиваем и открываем его обычным блокнотом, чтобы отредактировать параметры. Можете, конечно, как обычно не заморачиваться с настройкой всех параметров, а просто скачать конфигурационный файл у меня – ссылка. Скачанный файл помещаете в папку, упомянутую чуть выше с помощью менеджера файлов вашего vps хостинга.
Конфигурационный файл:
ModPagespeed on ModPagespeedDomain http://my_site.com AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html ModPagespeedFileCachePath "/var/mod_pagespeed/cache/" ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/" ModPagespeedRewriteLevel PassThrough # ModPagespeedEnableFilters add_head # ModPagespeedEnableFilters add_instrumentation ModPagespeedEnableFilters extend_cache ModPagespeedEnableFilters collapse_whitespace ModPagespeedEnableFilters combine_css # ModPagespeedEnableFilters combine_heads ModPagespeedEnableFilters move_css_to_head ModPagespeedEnableFilters elide_attributes ModPagespeedEnableFilters inline_css ModPagespeedEnableFilters inline_javascript ModPagespeedEnableFilters outline_css ModPagespeedEnableFilters outline_javascript ModPagespeedEnableFilters remove_quotes ModPagespeedEnableFilters remove_comments ModPagespeedEnableFilters rewrite_css ModPagespeedEnableFilters rewrite_images ModPagespeedEnableFilters insert_img_dimensions ModPagespeedEnableFilters rewrite_javascript # ModPagespeedEnableFilters strip_scripts
Как обычно, расскажу «что есть что» и с чем его едят.
ModPagespeed
включение и отключение модуля. Значения on и off соответственно.
ModPagespeedDomain
использование модуля только для определенного сайта.
AddOutputFilterByType
устанавливает обработчик и тип выходных данных.
ModPagespeedFileCachePath
директория хранения файлов кэша.
ModPagespeedRewriteLevel PassThrough
отключает базовый набор фильтров, который по умолчанию использует модуль, и которые безопасны для большинства сайтов.
ModPagespeedGeneratedFilePrefix
директория общей базы кэша и сжатых файлов. Указание требуется, но сама директория не используется, а сделана на будущее.
![]()
Теперь идет самое интересное – фильтры. Для их включения используется директива – ModPagespeedEnableFilters, а для выключения директива – ModPagespeedDisableFilters. Фильтры можно подключать и отключать по одному и более.
Примеры:
ModPagespeedEnableFilters filter1 ModPagespeedEnableFilters filter1,filter2 ModPagespeedDisableFilters filter1 ModPagespeedDisableFilters filter1,filter2
add_head
фильтр добавляет тег head в html документ при его отсутствии.
add_instrumentation
фильтр добавляет задержку при загрузке сайта, на стороне клиента.
extend_cache
фильтр улучшает кэширование ресурсов сайта: картинки, контент, сss, js.
collapse_whitespace
фильтр удаляет ненужные пробелы из html кода.
combine_css
фильтр объединяет несколько css файлов в один.
combine_heads
фильтр объединяет нескольких html тегов head в один.
move_css_to_head
фильтр перемещает css стили в html тег head.
elide_attributes
фильтр удаляет ненужные атрибуты в тегах html документа.
inline_css
фильтр перемещает маленькие css стили в html документ.
inline_javascript
фильтр перемещает маленькие javascript скрипты в html документ.
outline_css
фильтр перемещает большие css стили из html документа в css файл.
outline_javascript
фильтр перемещает большие javascript скрипты из html документа в javascript файл.
remove_quotes
фильтр удаляет ненужные кавычки из тегов html документа.
remove_comments
фильтр удаляет html комментарии.
rewrite_css
фильтр очищает css стили от комментариев, пробелов и сокращает название цветов.
rewrite_images
фильтр сжимает изображения. Использует для этого компрессию с помощью библиотек libjpeg, libpng и сжатие с помощью OpenCV.
insert_img_dimensions
фильтр добавляет атрибуты высоты и ширины для изображений.
rewrite_javascript
фильтр очищает javascript скрипты от комментариев и пробелов.
strip_scripts
экспериментальный фильтр который удаляет сценарии из html документа. Пока не понятно для чего его использовать, но функциональность он нарушает это точно.
Вот в принципе и все фильтры, которые доступны на данный момент. С остальными настройками вы можете ознакомиться на сайте google. Кстати говоря, пока доступна, только, бета версия mod_pagespeed и только на apache 2, но могу с уверенностью сказать, что глюков я пока не замечал.
После редактирования конфигурационного файла, нам нужно перезагрузить apache.
Пишем в терминале следующую команду:
/etc/init.d/apache2 restart
На этом настройка и установка окончательно закончена. А вы себе поставили такой модуль? И напоследок видео показывающее работу модуля. Также, если у вас появляются вопросы, то задавайте их в комментариях — я постараюсь ответить.