Это простое руководство является переводом статьи с иврита "Optimization guide for Joomla", и направлено на улучшение и оптимизацию производительности стандартного веб-сайта Joomla.

Полезные инструменты

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

Google page speed

Инструмент от Google можно назвать самым удобным и простым в использовании. Для браузеров Firefox и Chrome существуют расширения для использования этого инструмента.

Yahoo YSlow

Инструмент от Yahoo больше подходит для продвинутых пользователей. Он также доступен в качестве расширения для Firefox и Chrome. Его результаты более впечатляющие и содержат более подробную информацию и разъяснения для каждого результата в отчете.

Простые правила

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

Gzip

GZip - это метод для сжатия страниц, которые посылаются клиенту сервером. Сжатие добавляет нагрузку на сервер, но оно эффективно, и делает страницы значительно меньше. Для включения этой опции зайдите в панель администратора, далее выберите меню "Сайт" -> "Общие настройки" -> вкладка "Сервер". Включите опцию "Gzip-сжатие страниц". Если опция включена, но не срабатывает, то проконсультируйтесь с вашим хостером на предмет возможности поддержки Gzip.

Кэш

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

Сторона сервера

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

Включения кэша на стороне сервера довольна простая задача в Joomla. Зайдите в 'Менеджер плагинов", найдите плагин "Система - Кэш" и убедитесь, что он включен. Далее выберите меню "Сайт" -> "Общие настройки" -> вкладка "Система". В настройках кэша выберите "Стандартное кэширование". Стандартного кэшировние вполне достаточно для для большинства веб-сайтов. Вы можете использовать прогрессивное кэшировние только если производительность очень плоха. Время кэша зависит от того, насколько часто обновляется контент на вашем веб-сайте. Например, если контент на вашем веб-сайте обновляется меньше чем раз в день, то вы можете установить это значение в несколько часов, в противном случае оставьте его в значении по умолчанию.

Доступные вам обработчики кеша зависят от хостера. Вот мой приоритет обработчиков: memcached*, memcache, APC, файл. Я не буду вдаваться в подробности по каждому из них, так как это выходит за рамки руководства. Я думаю, что Вы без труда сможете найти подробную информацию в сети Интернет.

Сторона клиента

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

Следующие директивы регламентируют, как клиент будет хранить файлы в кэше, вместо скачивания их при каждом посещении. Давайте добавим следующие строки в файл .htaccess:

# 1 YEAR
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
# NEVER CACHE
<FilesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>

Каждая директива говорит клиенту хранить типы файлов в течении разного интервала времени. Данные директивы используют расширение Apache под названием mod_header. В качестве альтернативы вы можете использовать другое расширение - mod_expires. Для него необходимы другие директивы:

ExpiresActive On
ExpiresDefault A0

# 1 YEAR
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A29030400
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
ExpiresDefault A604800
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
ExpiresDefault A10800"
</FilesMatch> 

Если вы не знаете, какое именно расширение установлено на вашем сервере, спросите у хостера. Больше информации о клиентских кэш-директивах Apache вы можете найти здесь.

 

Сжатие

В дополнение к Gzip сжатию, мы можем добавить ещё больше сжатия текстовых файлов, таких как javascript и css. Просто добавьте следующие строки в файл .htaccess:

# compressing of files
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript 

Обратите внимание на то, что Gzip сжимает HTML, а это сжимает включенные в HTML файлы (такие как js, css и другие). Этот метод использует Apache расширение mod_deflate. Убедитесь, что оно установлено.

 

Уменьшение и объединение

Последний метод, который мы будем использовать - это сокращение CSS и Javascript файлов. Но что же это значит?

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

Объединение соединяет все js-файлы в один js-файл и делает тоже самое с css-файлами. И опять это выглядит как глупое действие, потому что размер скачиваемого остается такой же. Но скачивание 10 файлов это не то же самое, что скачивание одного файла, так как серверу необходимы ресурсы для каждого запроса. Объединение сохраняет ресурсы и оптимизирует клиентский процесс получения данных с сервера.

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