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

WordPress имеет низкий порог вхождения и поощряет экспериментирование с собой, что неплохо для разработчиков. Но, будучи развёрнут стандартным образом, WordPress не всегда достаточно быстр, чтобы понравиться поисковым роботам Google.

К счастью, начать оптимизацию WordPress тоже несложно: есть несколько приёмов, которые помогут быстро поднять производительность инсталляции:

17 приемов

1. Проверяйте ваш код на скорость исполнения, начиная с циклов. С точки зрения оптимизации, циклы – лёгкая добыча.

Используйте GLPTimer, инспектор кэша или другие подобные инструменты, чтобы найти узкие места.

Сосредоточьте усилия на основном цикле отображения записей (чаще называемом просто «цикл WordPress») и других больших циклах. Оптимизируйте SQL-запросы (смотрите пункт 2) и другие затратные по времени вещи (пункты 7 и 15), обычно вызываемые в циклах.

2. Кэшируйте данные lookup-запросов. Делайте предвыборку из всех lookup-таблиц и складывайте полученные данные в массив.

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

Если цикл WordPress может прокрутиться более одного раза, извлеките их не в цикле, а заранее, в специальном запросе с использованием $wpdb->get_results, и не забудьте выбрать только нужные вам столбцы плюс столбец-идентификатор.

Сохраните результат запроса в массив с ключом-идентификатором. Теперь используйте этот массив в основном цикле. Эта стратегия действительно оправдывает себя при отображении нескольких постов.

3. Следите за тяжёлым кодом консоли администратора в файле functions.php. Если вы добавили туда свой код, не забудьте обернуть его условием if_admin(), чтобы этот код действительно выполнялся только тогда, когда вы находитесь в консоли.

4. Удалите плагины. Каждый активный плагин потребляет ресурсы, замедляя работу WordPress и делая его потенциально нестабильным. Всё, что не используется на сайте, должно быть удалено.

Например, на этапе разработки я часто использую плагин Regenerate Thumbnails, когда настраиваю размер медиафайлов, а потом забываю отключить его, когда сайт вводится в строй.

5. Запретите неиспользуемые модули Apache. Я не знаю стопроцентного способа определить, какой из них нужен, а какой – нет.

В крайнем случае, попробуйте запрещать их по одному, каждый раз перезапуская Apache и проверяя сайт. Во всяком случае, на своих хостингах я всегда запрещаю mod_ruby, mod_dav, mod_proxy, setenvif и поддержку SVN.

6. Разрешите другие модули Apache. Нет, здесь нет опечатки. Убедитесь, например, что mod_expires загружается. А потом прочитайте пункт 12.

7. Внесите некоторые динамически получаемые значения в код в виде констант. Например, избавьтесь от вызовов get_template_directory_uri().

Многие не согласятся с этим, но мне кажется, что назначение этих вызовов – сделать так, чтобы тема запускалась на разных сайтах. А поскольку вы уже определились с тем, на каком сайте она будет запускаться – уберите код, обеспечивающий переносимость.

Если вы ленивы и хотите собрать вершки, пройдитесь по header.php, footer.php, sidebar.php и другим файлам, включаемым во многие страницы.

Главный цикл WordPress – ещё один хороший кандидат на хардкод-оптимизацию. Также, если файлы вызываются из цикла, удалите из них комментарии.

8. Уберите все пробелы из ваших шаблонов. Будет чем заняться долгими зимними вечерами, да? На самом деле всё не так страшно: вам не придётся делать это в текстовом редакторе. Есть инструменты, которые справятся с этим за вас.

Попробуйте набрать в терминале:

php -w original_source.php > cleaned_source.php

Правда, вам придётся пройтись по всем файлам темы, а средняя тема WordPress состоит из 20-30 файлов. Но вы только подумайте обо всех выигрышах, которые вам сулит оптимизация!

9. Используйте минимизированные версии JavaScript-библиотек. Откройте исходный код вашей главной страницы и проверьте все включённые файлы. Все ли ваши JQuery-плагины минимизированы?

10. Обратите внимание на файлы стилей. Минимизируйте их. Поработайте с инструментами, определяющими неиспользуемые CSS-элементы.

11. Если чувствуете вдохновение, попробуйте Apache-модуль PageSpeed от Google. Некоторые замечают проблемы с ним, но я уже успел установить его на 4 сайтах, и пока весьма доволен возросшей скоростью. Также обратите внимание на плагин WP Super Cache.

12. Исследуйте загрузку вашего сайта в браузере. Используйте инструмент Inspector ; Network Requests в Safari или вкладку Network в свойствах страницы в браузере Google Chrome, чтобы увидеть временную диаграмму загрузки страницы.

Обратите внимание на ответ сервера по поводу статики (JS, CSS, изображения). Если сервер постоянно отвечает «200», попробуйте внести в файл .htaccess, расположенный в корне вашего сайта, следующие параметры:

FileETag MTime Size
ExpiresActive on
ExpiresByType image/gif "access plus 86400 seconds"
ExpiresByType image/png "access plus 86400 seconds"
ExpiresByType text/css "access plus 86400 seconds"
ExpiresByType text/javascript "access plus 86400 seconds"
ExpiresByType application/application/x-shockwave-flash "access plus 86400 seconds"

13. Внимательно присмотритесь к хостингу. Вновь исследуйте Network Requests, на этот раз, обратив внимание на самый первый элемент запроса – сам HTML-файл.

Будет присутствовать определённая задержка в выполнении первого запроса. Если, несмотря на то, что все предыдущие рекомендации по отношению к php-коду были выполнены, задержка составляет более 500 миллисекунд, обратите внимание на загрузку сервера, количество свободной памяти и общую сопоставимость сервера возложенным на него задачам.

Если вы на дешёвом хостинге, советую выбрать более дорогой тариф или поменять хостинг-провайдера. Если у вас много сайтов, советую перейти на виртуальный сервер.

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

14. Gzip. В том же Safari сравните цифры в колонках Size и Transferred. Если они одинаковы, значит, HTML не сжимается перед отдачей на сервере. Установите и настройте mod_deflate. Есть хорошее описание этого процесса.

15. Экономьте время. Если вы используете php-функции rand() или mt_rand(), замените их на openssl_random_pseudo_bytes().

16. Настройте Apache. Если ваш хостинг позволяет, настройте некоторые параметры веб-сервера.

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

Так что прочитайте что-нибудь перед тем, как приступить к конфигурации.

17. Оптимизация .htaccess. Если вы не трогали дефолтный файл .htaccess из инсталляции WordPress, вам следует пропустить этот пункт.

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

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

На сегодня всё. Надеюсь, какой-нибудь из этих советов помог вашему сайту поднять производительность.

Перевод статьи «WordPress performance: 17 things to do right now» был подготовлен дружной командой проекта Сайтостроение от А до Я.