Pull to refresh

Небольшая оптимизация работы сайта на WordPress собственными руками

Предыстория


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

Основная проблема большинства из них в функциональной нагрузке. Если вы пытаетесь подключить CDN и только, то вам нет необходимости подключать тяжелый плагин с функциями кеширования\сжатия изображения\honey-pot-а\дополнительным редактором css (и такое бывает).

Нам не нужен лишний код, верно?

Попробовав около 10 разных, решил поэкспериментировать: написать мини-плагин оптимизатор.

Почему плагин?


Конечно, вы можете редактировать файл function.php из темы\дочерней темы. Но зачем?

Если редактировать файл темы — то при её обновлении, придется дописывать заново.
Или как было со мной, я просто забыл, что там был кусок кода, а потом удивлялся: "что же тут не так?".
Вы сами разработали тему — тогда стоит озадачиться этим вопросом внутри неё. Но в таком случае, вы вряд ли будете читать этот пост.

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

Существует мнение, что изменения внесенные в function.php работают быстрее, чем подключенный плагин с тем-же функционалом. Правда это или нет — увы, я не знаю.
Но чисто визуально разницу не ощутил.

Мы напишем маленький плагин и посмотрим, как он влияет на скорость загрузки страницы.

Gzip сжатие сайта


Вкратце: сервер сжимает код сайта в архив и передает браузеру, который его распаковывает и показывает пользователю. Результат — размер сайта становится меньше.
Внимание! В некоторых случаях сжатие может быть уже включено на сервере.
Как понять, что gzip отключен?

  1. Перейти на сайт
  2. Открыть панель разработчика
  3. Перезагрузить страницу
  4. Открыть вкладку "Сеть" (см. «Network»)
  5. Выбрать первый элемент списка с адресом сайта
  6. Далее "Заголовки" (см. «Headers») => "Заголовки запроса"
  7. Проверить состояние параметра "Accept-Encoding"



Если имеется параметр gzip — все классно, все работает.

На моем сайте, gzip не работал и я решил его включить. Существует несколько методов как это сделать, но я остановился на плагине.

Небольшой код:

## Включение сжатия сайта gzip
if( extension_loaded('zlib') && ini_get('output_handler') != 'ob_gzhandler' ){
	add_action('wp', function(){ @ ob_end_clean(); @ ini_set('zlib.output_compression', 'on'); } );
}

Разбирать тут особо и нечего — код очень простой. Его я обернул в файл function.php, создал папку по пути /wp-content/plugins/ с названием плагина и заработало. Главное — чтобы на сервере имелась библиотека zlib.

Ограничение ревизий постов


Старая история — большое количество ревизий поста тормозит БД, сам пост, да и вообще негативно сказывается на производительности. В моем случае это более чем актуально.
Я построил мультисайтовую сеть. Да еще и с активными пользователями, администраторами и всяким таким.

Ограничить количество ревизий — будет не лишним. Небольшой хук:

if( ! defined('WP_POST_REVISIONS') ) define('WP_POST_REVISIONS', 5);

5 — это соответственно количество этих самых ревизий. Можно поставить 10, или как посчитаете удобным.

Какого-то «Вау»-эффекта от этого не последует, но поможет сохранить жизнь БД и избавит от дальнейших проблем.

Отключение XML-RPC


Это уже относится к безопасности, но полезно. По крайней мере для тех, у кого xmlrpc.php всё еще включен. Ребят, привет!

Кто не знает, что это такое:
xmlrpc.php — нужен для возможности публикации записей отправкой с мобильного устройства.

Уже давно, является проблемой (в плане безопасности) для сайтов на WordPress. Можно установить написать плагин хук, который его отключает.

## Отключение XMLRPC
add_filter('xmlrpc_enabled', '__return_false');

Удаление версий скриптов и стилей


У WP есть прикол: в инспекторе отображать версии скриптов и стилей. Выглядит это так:



И снова — угроза безопасности. В теории зная версии скриптов или стилей, особенно популярных плагинов (напр. Elementor), можно совершать атаки.

Касательно производительности — тоже дает очень крохотный, но плюс.

## Удаляем версию скриптов
add_filter( 'script_loader_src', '_remove_script_version' );

## Удаляем версию стилей
add_filter( 'style_loader_src', '_remove_script_version' );
function _remove_script_version( $src ){
	$parts = explode( '?', $src );
	return $parts[0];
}

Заключение


Все эти сниппеты можно объединить в плагин или добавить в function.php темы\дочерней темы.

Пару слов про CDN от Google: я его подключил и обнаружил что с ним страница стала грузиться даже дольше, чем бе него. Если вы знаете куда копать, напишите в комментариях.

С помощью этих хуков я выиграл 2,3 секунды на загрузку страницы в десктопе и 1,5 секунды на мобильной версии сайта.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.