Ускоряем WordPress

9ea21bcb14cbf248200b43adf518968f

WordPress в стандартной установке довольно медленный. По умолчанию движок не использует некоторые возможности современного Веба для значительного своего ускорения. Существует целая куча плагинов для оптимизации WordPress’a. Давайте наведем в них порядок и проведем капитальную оптимизацию.


Прежде чем приступить, посмотрим, что показывает голая установка WordPress по Pagespeed:

fb7df8297d42d9ad526ff035d923675c3

Результат 76 из 100 довольно низкий. Посмотрим, насколько можно увеличить этот показатель.

Серверная часть

 

Nginx


Если Вы еще не используете Nginx, пора переехать на него. Простое и мощное решение. Конфигурация для работы с поддержкой permalinks и кешированием статики:

server {
        server_name wp.com;
        root /var/www/wp; # путь к WP
        index index.php;

        location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe$
                access_log off;
                log_not_found off;
                expires max; # кеширование статики
        }

        location / {
                try_files $uri $uri/ /index.php?$args; # permalinks
        }

        location ~ \.php$ {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}



PHP APC


Если у Вас нет каких-то особых причин, по которым Вы не можете установить APC, включайте его обязательно. Проверяем наличие APC (в ответ получим список настроек APC):

php -i | grep apc



Тюнинг Mysql


WordPress использует InnoDB, а это значит мы можем существенно увеличить производительность MySQL, подстроив ряд параметров (файл my.cnf) под наше железо:

Размер буфера InnoDB лучше поставить в половину доступной оперативной памяти:

innodb_buffer_pool_size = 256M



Не забываем включить кеширование MySQL:

query_cache_size = 32M
query_cache_limit = 1M



Более расширенная настройка MySQL для WordPress.

Кеширование


Это наиболее важный пункт. Кеширование может дать значительное ускорение сайта и экономию ресурсов сервера. Для наглядности будем использовать ab от Apache. Проверим стандартную установку WordPress без кеширования. Запросы направляем через локальную сеть, поэтому задержку ничего, кроме самого WordPress’a не создает:

ab -c 10 -n 500 http://wordpress/



Получаем среднее время на запрос около 50мс:

Total transferred:      4183000 bytes
HTML transferred:       4074500 bytes
Requests per second:    17.62 [#/sec] (mean)
Time per request:       567.421 [ms] (mean)
Time per request:       56.742 [ms] (mean, across all concurrent requests)
Transfer rate:          143.98 [Kbytes/sec] received



Хром показывает среднее ожидание ответа на уровне 150мс (сервер находится в Нидерландах):

073ece5c356d028206d1f7c3b844fefe8

WP Super Cache


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

9c010f2ddc93d471422a0ea577182c243

С включенным WP Super Cache получаем уменьшение среднего времени на запрос в 25 раз(!):

Total transferred:      4293500 bytes
HTML transferred:       4146500 bytes
Requests per second:    499.01 [#/sec] (mean)
Time per request:       20.040 [ms] (mean)
Time per request:       2.004 [ms] (mean, across all concurrent requests)
Transfer rate:          4184.61 [Kbytes/sec] received



Cреднее ожидание ответа в Хроме уменьшилось в 3 раза:

f3b4caf6d82d7631004ae5653c90ddcf3

В качестве серверной альтернативы WP Super Cache можно использовать Varnish. Он позволяет снизить время на обработку запроса еще почти на порядок, но само решение менее гибкое (хорошо подойдет для блогов без элементов динамики).

Стили, скрипты и картинки

 

Минификация и сжатие


Минификация CSS/JS может сэкономить 10…15% их размера. Для включения минификации статики есть модуль WP Minify. Качайте, активируйте и модуль начнет работать.

Оптимизация картинок


Картинки могут составлять очень большую часть общего размера страницы. Lossless сжатие картинок может сэкономить 30…40% их размера. Это умеет делать модуль EWWW Image Optimizer. Для его работы понадобится установить imagemagick и библиотеку gd:

apt-get install imagemagick php5-gd



Хорошие практики и опыт

 

  • Лучше всего выбирать VPS для хостинга WordPress. На Shared хостинге многое из описанного выше сделать невозможно. Кроме этого, VPS сейчас достаточно дешевый.
  • Проверяйте темы с помощью Pagespeed перед использованием
  • Очищайте корзину
  • Удаляйте старые ревизии постов
  • Удаляйте спам-комментарии
  • Отключайте трекбеки в моменты, когда все становится совсем медленно
  • Раздавайте RSS через feedburner



В результате


У нас получилось голую установку WordPress разогнать почти в 100 раз по времени генерации страницы (мы включили Varnish) и увеличить показатель по Pagespeed с 76 до 93:

8a7f5fba1fbf1d3d62e34ab47915a3382

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


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

Кстати, анализ sevenpercentcatherine.wordpress.com (хостится на wordpress.com) набирает 83 из 100 по Pagespeed. Из проблем — нет минификации и слишком большой ответ от сервера (350мс).

Делитесь своим опытом и инструментарием ускорения WordPress’a в комментариях.