Оптимизация нагрузки на Wordpress - изображение 5e5 на https://digitaldali.ru

Оптимизация нагрузки на WordPress

Много копий было сломано в обсуждениях, подходит ли WordPress для реализации больших и сложных проектов, или на нем можно разрабатывать только простенькие блоги. Прецедентов создания масштабных проектов множество: от Techcrunch и vc.ru до Forbes и CNN. Но так ли просто сделать большой проект на WP? Не слишком ли он прожорлив к ресурсам сервера? Этот вопрос мы с вами и рассмотрим в этой статье.

Для примера мы возьмем один из наших проектов на WP, проанализируем его нагрузку на сервер и разберем процесс ее оптимизации.

Анализируем нагрузку

 

wp1

Для начала давайте попробуем оценить масштабы бедствия: сколько по времени открывается сайт, сколько файлов загружается и сколько запросов к MySQL требуется для отображения страницы.

 

В этом нам поможет отличный плагин Query Monitor — устанавливаем его. В нашем случае основная проблема ясна: при загрузке страницы делается 70 запросов к базе данных, причем некоторые занимают до секунды. Давайте разбираться, почему же так много запросов требуется для отрисовки простенькой страницы.

Оптимизация MySQL

WordPress не был бы таким популярным, если бы не его удобнейшая админка. А сделать админку в WP такой удобной позволяет великолепный плагин Advanced Custom Fields. Если вы еще его не используете, то обязательно попробуйте, он позволяет выводить данные любых форматов на сайте и с удобством редактировать их администратору.

Оптимизация wp_options

Все данные в ACF хранятся в виде отдельных записей в таблицах с мета-данными: wp_postmeta, wp_usermeta и wp_options. На wp_options стоит обратить внимание, при анализе типового сайта мы можем увидеть десятки подобных запросов к БД:

wp3

Дело в том, что многие плагины хранят свои настройки в этой таблице и никак не кешируют данные. Вот пример данных в таблице: справа — столбец autoload, который отвечает за предварительную загрузку (и кеширование) данных.

 

wp2

Советуем для часто используемых данных выставить autoload=yes. В нашем случае это сэкономило ~50 запросов к БД.

 

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

 

Ускорение сохранения и загрузки полей ACF

Перед началом разработки с использованием Advanced Custom Fields обязательно нужно создавать в папке темы каталог acf-json. Это позволит включить функцию Local JSON, которая кеширует настройки полей в json файлах и значительно ускоряет их загрузку и запись, а также позволяет с удобством хранить структуру полей, например, в git и работать над сайтом в команде.

 

Кеширование

Если на вашем сайте нет большого количества динамического контента (например, комментариев), но загрузка данных требует больших ресурсов сервера, то следует подумать о кешировании страниц полностью.

В этом нам поможет плагин WP Simple Cache, или любой его аналог. Если кеширование страниц целиком вам не подходит, то все равно стоит подумать о кешировании конкретных сущностей вашего сайта.

Оптимизация кода

post-10513-Code-Refactoring-Cat-in-Bathtu-U295

Просмотрите весь код, в особенности — тяжелые циклы и блоки с wp_query. Не стоит делать сложные запросы, с большим количеством условий к записям WP. Они могут выполняться очень долго из-за сложных JOIN’ов на уровне базы данных, так что иногда проще получить большее количество записей из базы и отфильтровать их на уровне PHP. Мы столкнулись как раз с такой проблемой:  нам пришлось переложить нагрузку на само приложение, т.к. хостер накладывал жесткие ограничения на нагрузку к БД.

Также проверьте, возможно, некоторые участки вашего кода написаны неоптимально и их можно улучшить.

 

Минификация файлов

Для ускорения загрузки страницы не помешает соединить все js и css файлы в один и сжать их. Это не снизит значительно нагрузку на сервер, но страницы будут грузиться немного быстрее, что, согласитесь, тоже неплохо. Для сжатия можно использовать, например, этот плагин.

Результаты

За счет уменьшения количества и оптимизации “тяжелых” запросов нам удалось уменьшить нагрузку на БД практически до нуля при возросшей посещаемости сайта.

wp4

Правда, загрузка на процессор немного выросла:

wp5

Надеемся, что эта заметка поможет вам сделать ваш сайт чуть более быстрым и менее прожорливым. Если возникнут вопросы или понадобится помощь — пишите нам, мы бесплатно проанализируем ваш сайт и предложим решение по оптимизации!