Тормозят ли плагины скорость работы WordPress?
Эта короткая заметка посвящается вопросам из рубрики: «что лучше плагин или код в functions.php». А также утверждениям неопытных, о том, что плагин - это зло само по себе, потому что тормозит WordPress. Ниже разберемся, как влияет на скорость загрузки WordPress один и несколько плагинов.
Следующий вопрос мне некогда задали в разделе вопросов:
Я знаю, что большое количество плагинов wordpress замедляет работу сайта. У меня вопрос: я использовал плагины для создания таблиц на страницах, и после их создания плагины деактивировал. Таблицы созданы и работают.
А влияет ли на скорость сайта такие деактивированные плагины. То же самое с плагинами по созданию и редактированию меню и т.д. Прошу разъяснить поподробнее. Спасибо!
Давайте разбираться что к чему...
Факт наличия плагина не нагружает WordPress!

Утверждение, что «большое количество плагинов WordPress замедляет работу сайта». Довольно спорное и по сути неверное! Тут все зависит от плагинов: их функционала и грамотно написанного кода.
Сами по себе активные плагины не влияют на работу сайта в целом и на фронт-энд в частности. А неактивные тем более, они просто занимают место на диске и немного влияют на скорость загрузки страницы плагинов в админке, так как там они отображаются и для этого с главных файлов считывается информация. И больше ни на что!
Чтобы понять почему происходит именно так, рассмотрим как загружаются плагины.
Принцип подгрузки плагинов
WordPress при активации плагина, записывает путь на его главный файл в опцию active_plugins. Далее, при загрузке любой страницы (админки, фронта, крона, AJAX, REST), WordPress получает список всех активных плагинов из опции active_plugins, которая содержит массив названий главных файлов плагинов. После получения опции WP просто подключает главный файл каждого плагина в PHP. За получение списка активных плагинов отвечает функция wp_get_active_and_valid_plugins(). Сама конструкция подключения всех плагинов находится в файле wp-settings.php и выглядит так:
// Load active plugins. foreach ( wp_get_active_and_valid_plugins() as $plugin ) { wp_register_plugin_realpath( $plugin ); include_once( $plugin ); } unset( $plugin );
А так выглядит опция, где хранятся активные плагины:
$active_plugins = get_option( 'active_plugins' ); /* Получим в $active_plugins Array ( [0] => 404-error-monitor/index.php [1] => backupwordpress/backupwordpress.php [2] => democracy-poll/democracy.php [3] => disable-emojis/disable-emojis.php ) */
Из сказанного выше следует, что плагин с пустым кодом, который вообще ничего не делает, никак не влияют на скорость работы сайта. Так как опция active_plugins будет получена в любом случае, а файл, который подключается в PHP, подключается о-очень быстро - это стандартная процедура в PHP.
Неактивных плагинов в списке нет, а значит они вообще никак ни на что не влияют!
33 плагина
Давайте представим, что у нас есть 32 плагина, каждый из которых состоит из пары строк кода и вносит незначительные изменения в работу WP. И есть еще один плагин, который состоит из 1000 строк кода и вносит изменений в несколько раз больше, чем предыдущие 32 плагина вместе взятые: он отключает фильтры, включает свои, совершает запросы к БД, что-то обновляет/проверяет, добавляет свой функционал на сайт и выводит какие-то блоки в админке и фронте и делает что-нибудь еще.
Если сравнить первые 32 и последний 1 плагин, то последний будет нагружать систему в разы больше! К такому примеру можно отнести тяжеловеса «WooCommerce» и мелочь вроде «Disable Emojis», «Disable File Editor», «Cyr to Lat».
Фраза «чем больше плагинов, тем хуже грузится WordPress» - это глупость. Не количество, а качество имеет значение!
Когда плагины влияют на скорость работы сайта?
Влияние на скорость работы происходит в коде самого плагина, поэтому все зависит от функционала и хорошо или плохо написанного кода.
Также влияние происходит при проверке новой версии плагина в момент работы запланированной задачи (cron): проверяются неактивные и активные плагины. Но это только в админке, с периодичностью раз-в-пол-дня и более частой периодичностью на специальных страницах, подробнее читайте тут...
Кстати, сам WordPress делает всего один запрос к своему API и получает данные для всех установленных из репозитория плагинов разом. А платные плагины (если у них вообще есть автообновление), как правило делают один запрос на один плагин!
Как узнать какой плагин больше всего тормозит систему?
Если возникли проблемы и виноват скорее всего плагин, то можно:
-
Использовать старый добрый метод: отключать плагины по одному и смотреть как ведет себя сайт.
-
Установить известный плагин «Query Monitor» и посмотреть что он показывает по нагрузкам. Если в нем указаны излишние нагрузки, то при этом обязательно будет видно какой плагин, функция, хук или файл создает нагрузку. Так можно понять, какой плагин виноват...
- Установить плагин «P3 (Plugin Performance Profiler)» и возможно он укажет вам на «самое слабое звено».