Простые способы ускорения сайта на WordPress
В этой статье я расскажу про несколько простых, но неочевидных способов ускорения сайта на WordPress.
Конвертирование логотипа в формат SVG
Замечания в тесте PageSpeed типа "Используйте современные форматы изображений" говорят о том, что нужно или конвертировать изображения в webp, или делать для них отложенную загрузку на JS (не атрибут loading="lazy"). Но это хорошо работает с изображениями ниже первого экрана. Для изображений на первом экране, например логотипа, это не подходит (читайте Как правильно применять атрибут loading="lazy" для оптимизации LCP). Можно конечно вручную переконвертировать картинку в WebP, загрузить в какую-то папку, сделать разметку <picture>
для поддержки в устаревших браузерах.... Но есть другой путь - конвертировать ваш логотип из формата PNG в SVG ( SVG поддерживается бОльшим количеством браузеров). Конвертировать можно в каком-нибудь графическом редакторе или онлайн-сервисе.
К сожалению WordPress по-умолчанию не поддерживает загрузку SVG в медиабиблиотеку. Чтобы решить эту проблему можно установить бесплатный плагин SVG Support или же приобрести лицензию на наш True Image & Lazy Load, где эта функция уже встроена.
Дальше просто загружаете ваш логотип в формате SVG стандартным способом.
Отключение задач CRON
Эффективным способом оптимизации сайта является отключение задач CRON (если wp-cron.php грузит сервер). Такая нагрузка может приводить к к увеличению Time to First Bite (или сокращенно TTFB, оно же – время ответа сервера) – характеристика, которая обозначает временной интервал до получения самого первого байта страницы, сразу после отправки соответствующего запроса. Я столкнулся с этой проблемой на своих сайтах, когда попросил техническую поддержку Бегет дать информацию по нагрузке на процессор. Оказалось что нагрузка создаётся работой скриптов CronTab и на выполнение задач cron отводится более 50% процессорного времени. У меня нагрузка CP ежедневно превышалась и даже пришлось взять тариф подороже.
Причина такой большой нагрузки - это cron-задания давно деактивированных и удалённых плагинов. Например у меня до сих пор висели задачи wpseo_permalink_structure_check, wpseo-reindex-links от Yoast и mwp_update_public_keys (от ManageWP Worker). При этом плагин ManageWP Worker я давно удалил! То есть разработчики плагинов элементарно не предусмотрели удаления задач cron после деактивации их плагинов. И чем старше сайт, тем больше проблем.
Чтобы проверить как много таких зависших заданий cron можно установить плагин WP Cron Cleaner или любой аналогичный. Смотри количество заданий (у меня их было 45). В PRO версии плагина можно автоматически найти зависшие задания, но покупать платную версию необязательно. Если вы уверены у вас нет каких-то особенных, вручную добавленных заданий, то просто выделяем все и удаляем.
После этого достаточно обновить любую страницу сайта и все нужные задания опять запустятся. У меня после это операции осталось лишь 25 заданий. То есть было 20 зависших лишних заданий!
Плагин WP Cron Cleaner после этого можно удалить.
Чтобы убрать лишнюю нагрузку навсегда, а wp_cron
при этом функционировал, мы его отключим и будем обращаться к файлу wp-cron.php через cron
на сервере.
- В файле
wp-config.php
прописать следующую строчку
define('DISABLE_WP_CRON', true);
Сделать это можно скачав файл wp-config.php
по FTP или через встроенный Файловый менеджер (если у вас Бегет )
2. В Меню CronTab на хостинге мы создадим cron
задачу на обращение к wp-cron.php
каждый час:
Вот строка которую нужно ввести:
/usr/local/bin/php7.4 /usr/local/bin/wp cron event run --due-now --path=/home/k/youraccountname/yoursitename.com/public_html > /dev/null 2>&1
Здесь:
- /usr/local/bin/php7.4 на Бегете - это последняя стабильная версия РНР для консоли (на момент написания статьи)
- /usr/local/bin/wp это путь к wp-cli серверной утилите wordpress
- wp cron event run --due-now это запуск wp-cli через РНР и говорит что надо выполнить подходящие задачи
- youraccountname - имя вашего аккаунта
- yoursitename.com - ваш домен
- /dev/null 2>&1 это чтобы крон не отсылал результаты выполнения на email и вывод в пустоту
Чтобы правильно получить фрагмент /home/k/youraccountname/yoursitename.com/public_html нужно в корень вашего сайта загрузить по FTP небольшой PHP файлик (например test_my_path.php
) с такой строкой: <?php echo DIR;
Далее обращаемся по адресу http://yoursitename.com/test_my_path.php и видим точный путь на вашем хостинге
После проведенной оптимизации нагрузка упала в 2 раза и я смог перейти на более дешёвый тариф на Бегет.