От автора: определение частоты использования admin-ajax.php – очень распространенный сценарий при работе с WordPress. Если вы уже давно работаете с WordPress, то должны были сталкиваться с этим при запуске тестов скорости и проверки логов доступа на сервере. Высокое потребление вызвано сторонними плагинами и частыми некэшируемыми запросами из панели администратора из-за Heartbeat API (например, автосохранение черновиков). Тем не менее, важно диагностировать высокие всплески admin-ajax.php, когда вы видите их, так как они, как известно, замедляют сайт. Ознакомьтесь с приведенными ниже рекомендациями по способам решения проблем с admin ajax WordPress.
Что такое файл admin-ajax.php?
При правильном использовании файл admin-ajax.php не так плох. Это часть ядра, он был добавлен командой разработки WordPress в версии 3.6. Цель admin-ajax.php – создать соединение между браузером и сервером посредством AJAX. Это открывает продвинутую функциональность, такую как улучшенное автосохранение, отслеживание изменений, таймауты авторизации, управление сессией и уведомления о блокировке поста при редактировании несколькими пользователями. Все функции замечательные, особенно для тех, кто работает с несколькими админами и авторами.
«Идея в том, чтобы иметь относительной простой API, посылающий XHR запросы на сервер каждые 15 секунд и запускающий события (или колбеки) при получении данных. Другие компоненты смогут зацепиться или получить уведомление об активности другого пользователя. Это можно использовать для блокирования одновременного редактирования виджетов и меню или для любых других задач, требующих регулярных обновлений с сервера.»
Люди без особых технических навыков могут повлиять на admin-ajax.php только одним образом – они могут попробовать понять, почему этот файл замедляет тесты скорости в инструментах типа Pingdom (см. пример ниже). Или же можно посмотреть тонны запросов к файлу в логах доступа к хосту.
Просмотр admin-ajax.php в тестах скорости и логах доступа – это результат двух разных сценариев. Один на front end и другой на back end. О втором мы поговорим ниже.
1. Плагины могут вызвать резкий скачок в admin-ajax.php
Первая и самая частая проблема, возникающая у людей с admin-ajax.php, связана со сторонними плагинами. Это обычно видно на front end и показывается в тестах скорости. Разработчики используют этот файл и/или AJAX, чтобы добавить функциональность в свои плагины. Но если вы видите запрос к admin-ajax.php , не факт, что он замедляет ваш сайт. AJAX загружается после загрузки страницы, определенные запросы можно грузить асинхронно. Но и это не говорит о том, что разработчик делает все правильно или о производительности кода. Для разработчиков есть статья о том, как правильно использовать AJAX в темах и плагинах WordPress.
Ниже представлены примеры того, как можно быстро диагностировать скачки в admin-ajax.php. Мы будем использовать GTmetrix, так как он позволяет подробно разбирать отдельный пост и ответ. Pingdom, к сожалению, не позволяет просматривать данные из формы запроса. Можно также использовать Google Chrome Devtools или WebPageTest.
Высокие скачки admin-ajax.php из Visual Composer Plugin
Ниже представлен сторонний WordPress сайт с большими скачками в admin-ajax.php. Как видно, GTmetrix показывает скачок до 8 секунд! Остальная часть водопада выглядит нормально, но этот момент владелец сайта должен решить обязательно.
Если кликнуть в POST admin-ajax.php запрос, откроется 3 вкладки: Headers, Post и Response. Во время диагностики таких проблем нас интересуют вкладки Post и Response. На этом сайте можно мгновенно посмотреть подсказки на вкладке Response. Видно, что часть запроса связана со скриптом vc_shortcodes-custom-css.
Быстрая копипаста в google дате нам результат – проблема в плагине/конструкторе страниц Visual Composer для WordPress. Вы удивитесь количеству индексов в google.
Дальше этот человек должен убедиться, что у него установлена последняя версия Visual Composer. Если да, то необходимо связаться с разработчиками плагина и заявить о проблеме с admin-ajax.php. На самом деле, это частая проблема с плагином, как видно из поста на Stack Overflow. Плюс WordPress в том, что если вам не удалось решить проблему с одним плагином, почти всегда есть другие плагины. Например, можно попробовать другие конструкторы страниц Beaver Builder или Elementor.
Высокие скачки admin-ajax.php из Notification Bar Plugin
Ниже представлен второй пример сайта разработчика. После установки какого-то стороннего плагина мы сразу увидели огромный всплеск в admin-ajax.php.
Если кликнуть на запрос POST admin-ajax.php, можно подробно исследовать его. Можно заметить, что в данных поста есть “action=mtsnb_add_impression&bar_id=88&ab_variation=none.”.
Как правило, первая часть действия post также относится к CSS классу в плагине. Опять быстро гуглим «mtsnb», и первым результатом выпадает плагин Notification Bar, который запущен на нашем сайте.
У разработчиков есть и другие способы отслеживания плагинов, которые генерируют POST запрос, но, как мы выяснили, тест скорости и поиск google тоже достаточно эффективны.
Верный способ определить происхождение admin-ajax.php
Выше описано пара легких способов того, как быстро найти плагин в WordPress, который вызывает проблема. По нашему опыту, это работает в 99% случаев. Но в случаях, когда post данные и действия не так ясны, всегда можно пойти старым способом. Просто отключите все плагины в WordPress. Запустите тест скорости. Если admin-ajax.php нигде не найден, включайте по одному плагину и повторно запускайте тесты. Отключение всех плагинов – верный способ найти источник.
Здесь также поможет тестовое окружение Kinsta. Просто скопируйте WordPress сайт в тестовую среду и запустите тесты без воздействия на настоящий сайт. После нахождения причины можно поправить настоящий сайт.
Подобные проблемы также может помочь решить отчет по использованию AJAX на MyKinsta analytics. Там можно смотреть определенные AJAX всплески за определенные периоды.
2. Проблемы CPU с admin-ajax.php на back end
Вторая основная проблема — WordPress Heartbeat API использует admin-ajax.php для отправки AJAX запросов из браузера, что может нагрузить CPU. Каждый AJAX запрос загружает весь back end WordPress и обходит все формы кэширования. Как правило, в тестах скорости этого не увидишь. Это особенно важно знать тем, кто использует дешевые общие хосты, так как у них не так много свободного CPU. WP Tavern испытали это на своей шкуре и мигрировали с HostGator из-за множества зависаний.
Нужно аккуратно подходить к одному сценарию – автосохранение в WordPress и открытые вкладки. Например, мы запустили новый черновик на сайте и оставили вкладку открытой. Heartbeat API по умолчанию каждые 15 секунд будет биться в admin-ajax.php для автосохранения. Если оставить вкладку открытой на компьютере, то один пост может сгенерировать 5 760 запросов за день!
Для одного человека это много запросов на back end. Но что будет, когда на сайте будет несколько редакторов? Эти запросы быстро умножатся. Мы испытали это в нашем недавнем примере DARTDrones, где мы помогали расширить сайт WooCommerce для Shark Tank. За 24 часа они получили более 4 100 запросов в файл admin-ajax.php с 2000 уникальных посетителей. Не самое хорошее соотношение запросов к посетителям. Мы обнаружили это через wp-admin referrer URL, который был создан из-за того, что их админы обновили сайт, чтобы подготовиться к показу.
Есть способы решить проблему с запросами к admin-ajax.php на back end при автосохранении, ревизиях, блокировании и т.д. Здесь нам поможет бесплатный плагин Heartbeat Control plugin от Jeff Matson.
На данный момент The Heartbeat control имеет 70 000+ активных установок с рейтингом 5 из 5 звезд. Последний раз он обновлялся 2 года назад, но за это время работа Heartbeat API почти не поменялась. Можете скачать его с репозитория WordPress или найти в панели WordPress под «Add New plugins».
Плагин позволяет парой кликов управлять частотой WordPress heartbeat API. Первая опция контролирует heartbeat locations, такие как полное отключение или «разрешено только на страницах редактирования постов». Рекомендуем использовать последнее, если вы не уверены, что можете полностью отключить функцию, не сломав плагин, который ее использует.
Вторая опция позволяет выбрать частоту. Если изменить значение с 15 секунд на 60, это кардинально снизит количество запросов, что сэкономит ресурсы сервера (загрузка CPU).
Можно также использовать премиум плагин типа perfmatters (разработан членом команды Kinsta), который позволяет отключать heartbeat, изменять его частоту и менять интервал автосохранения.
Заключение
Как видите, существуют быстрые и легкие способы диагноза и решения проблем с admin-ajax.php. Как правило, они возникают из-за сторонних плагинов, которые могут конфликтовать друг с другом или иметь плохой код. Если у вас загружается CPU на back end из-за admin-ajax.php, подумайте об управляемом WordPress хостинге типа Kinsta. У них больше опыта работы с проблемами производительности такого типа.
А у вас возникали проблемы с admin-ajax.php на сайте WordPress? А, может, у вас есть советы. Будем рады услышать ваши мысли.
Автор: Brian Jackson
Источник: https://kinsta.com/
Редакция: Команда webformyself.