Пользователь
0,0
рейтинг
26 мая 2014 в 19:05

Разработка → Ускоряем Wordpress

image

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


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

image

Результат 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|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                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):

php -i | grep apc


В версиях PHP после 5.5 есть встроенный модуль opCache, так что 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мс (сервер находится в Нидерландах):

image

WP Super Cache

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

image

С включенным 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 раза:

image

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

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


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

Минификация CSS/JS может сэкономить 10...15% их размера. Для включения минификации статики есть модуль WP Minify. Качайте, активируйте и модуль начнет работать. Gzip позволит уменьшить размер текстовых файлов в несколько раз. В Nginx'e включается так:

server {
...
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
...
}


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

Картинки могут составлять очень большую часть общего размера страницы. 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:

image

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


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

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

Делитесь своим опытом и инструментарием ускорения Wordpress'a в комментариях.
Den @golotyuk
карма
2,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (27)

  • 0
    Уже полгода бьюсь с LiveStreet CMS, с подобной оптимизацией, ни в какую.
    Для Wordpress попробую ваш метод, спасибо.
    • 0
      Исследую вопрос с LiveStreet CMS, если соберем полезную информацию — обязательно опубликую.
    • 0
      Забавно, но у меня LS «из коробки» работает настолько шустрее, чем WP, что вопрос оптимизации даже в голову не приходит.
    • 0
      memcached
  • +5
    По моему, какие-то очевидные вещи описаны в статье, для такого сайта.
    • +4
      Тем, кто работает с ЦМС очень часто не хватает очевидных вещей :)
  • 0
    Можете ещё посмотреть QuickCache плагин, тоже делает свое дел, довольно не плохо.
  • +14
    реально банальщина, ни одной новой фичи, которая не была бы описана в тысяче других статей про оптимизации.
    самый обычный набор оптимизаций для любой cms.
  • 0
    У меня от такие цифры:
    Concurrency Level: 10
    Time taken for tests: 0.300763 seconds
    Complete requests: 500
    Failed requests: 0
    Write errors: 0
    Total transferred: 9690342 bytes
    HTML transferred: 9485433 bytes
    Requests per second: 1662.44 [#/sec] (mean)
    Time per request: 6.015 [ms] (mean)
    Time per request: 0.602 [ms] (mean, across all concurrent requests)
    Transfer rate: 31463.31 [Kbytes/sec] received

    Во время настройки отлично помогла ссылка code.tutsplus.com/tutorials/how-to-analyze-your-wordpress-installations-performance--wp-26472.

    P.S.: хорошо-бы еще настроить Last-Modified и обработку Not Modified, о чем в посте не увидел ни слова. И где gzip?
    • 0
       Спасибо, gzip добавил. Заголовок Last-Modified устанавливает модуль минификации.
      • 0
        Last-Modified полезно устанавливать не только для статики, но и для самих страниц.
  • +2
    Самая лучшая оптимизация вордпресса, это отключение лишних плагинов и вывода лишней информации в header и не забывать отключать подсчет числа постов в категориях меню.
    Использование supercache на конфигурациях с nginx php-fpm вряд ли будет целесообразным — nginx отлично справляется с этим, да и работа таких кэшей на nginx очень не стабильна (возможно связана со спецификой моих адресаций, но supercahe зависал через сутки работы)
  • 0
    Все это, конечно, замечательно, но при чем здесь WordPress? :) Это подходит для оптимизации любого (даже статического html сайта), но оно не спасет при тупящем движке.
    • 0
      Согласен, что wordpress тот еще двиг, но про тупящий — это слишком. У меня есть сайтики на 60К страниц с разными метатегами и таксономиями — работает и шустренько работает. Чего это стоили, не буду говорить, но сделать можно.
  • 0
    Memcached + Nananananannnana Batcache!

    А для всего что вы описали есть простой модуль mod_pagespeed для Apache, или ngx_pagespeed для nginx :)
  • +1
    1. В gzip_types я бы добавил еще application/javascript.
    2. Строка с «location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf...» в конце просто обрывается, конфиг в итоге синтаксически неверен.
    3. В поставках последних версий php веток 5.2, 5.3 и 5.4 есть модуль opcache. Есть ли какие-то причины продолжать ставить apc? (вопрос без подвоха, я не пытался сравнивать их производительность, но если есть какие-то основания использовать именно apc — их стоило бы привести в статье)
    • 0
      1. text/html можно еще добавить и еще много всего.
      2. Там как я понимаю не готовый конфиг, а всего лишь пример.
      3. Opcache есть и приглядывает за ним автор MMCache, честно говоря я его ни разу не смотрел(opcache), но вместо apc использую xcache, это все тоже что и MMCache, opcache, eaccelerator, но с дополнительными плюшками который нет, ну или не было, ни у кого из выше перечисленных, а именно кеширование переменных(var) и подержка многоядерных систем.
      • 0
        1. Ответы с типом “text/html” сжимаются всегда (если, конечно, gzip on). nginx.org/ru/docs/http/ngx_http_gzip_module.html#gzip_types
        2. Синтаксически неверный пример? Там, если присмотреться, location "~* ^.+\.(", а закрывающей скобки и открывающей фигурной скобки просто нет. По мне, так все-таки ляп, а не часть задумки.
    • +1
      По поводу APC:
      3. PHP 5.5 c OPcach именно только так и никаких других акселераторов — прирост скорости в несколько раз в отличие от голого PHP 5.3 (а если он с APC то там акселерация начинает борется с недостатком памяти сервера — но так уж работает именно APC).

      ©
      • 0
        Спасибо, добавил этот комментарий в статью.
    • 0
      Спасибо, сделал правки.
  • +5
    > Ускоряем Wordpress
    Эта музыка будет играть вечно. Из года в год.
  • 0
    OFF: Google PageSpeed дает «google.com» 92/100, «yandex.ru» 99/100.
  • 0
    APC дальше 5.3 версии не работает.
  • 0
    Как показывает практика стоит перенести /wp-content/uploads как и тему в субдомен тогда будет 98-99 из 100.
    Ну и заменить в темах динамичесские ссылки на графику статическими.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.