KakapoWPKakapoWP
ВходПопробовать
Справочный центр/Performance/Autoload: измерить автоматически загружаемые опции и переключить их

Autoload: измерить автоматически загружаемые опции и переключить их

Относится к: Kakapo Performance·4 мин чтения

Что здесь вообще измеряется

WordPress при каждом отдельном вызове — главная страница, изображение, обращение REST — читает все опции с заполненным столбцом autoload одним-единственным запросом. Значит, эти строки стоят времени не один раз, а всегда. Какие значения столбца считаются как «загружается», Kakapo спрашивает у самого WordPress (wp_autoload_values_to_autoload, начиная с 6.6, вместе с фильтром); на более старых установках действует список yes, on, auto-on, auto. Затем длина каждого значения считается в PHP, то есть в настоящих байтах. LENGTH() в SQL был бы быстрее, но в зависимости от драйвера считает символы вместо байт — под SQLite при умлаутах и эмодзи в интерфейсе стояли бы неверные числа. Чтение идёт шагами по 100 строк и не более 20 000 строк за проход; если этот предел достигнут, интерфейс говорит об этом и прямо помечает числа как нижнюю границу. Измерение запускается только при открытии раздела или по кнопке «Измерить заново» — никогда при построении страницы для посетителя — и действует затем 300 секунд.

Как правильно читать четыре показателя

Вверху стоят четыре числа. «Загружается при каждом вызове» называет общий размер, количество опций и длительность измерения. «Доля от порога предупреждения» считает это относительно 800 000 байт — ровно тот же порог, что и у проверки «Состояние сайта» ядра WordPress, вместе с её фильтром; две разные границы предупреждения в одной установке только сбивали бы с толку. «Из них переключаемо» — это часть без активного владельца, то есть то, к чему ты действительно можешь притронуться. «Уже переключено» суммирует то, что ты здесь уже вынул из загрузки. Ниже карточка «Откуда берётся нагрузка» показывает тот же объём с разбивкой по происхождению, а вторая карточка — 25 крупнейших отдельных позиций.

Сопоставление — это сравнение имён, а не доказательство

В таблице options нет столбца «Владелец». Поэтому Kakapo сравнивает имя опции с тем, что действительно лежит на диске: с именем каталога, именем файла главного скрипта и текстовым доменом каждого установленного плагина, а также со слагами всех тем. Побеждает самый длинный подходящий префикс, иначе «kakapowp» победил бы «kakapowp_performance» и был бы назван не тот плагин. Что плагин на самом деле использует для своих опций, не указано ни в одном заголовке — сокращение вроде «wpseo» из «Yoast SEO» вывести невозможно. Такие случаи попадают в группу «нет соответствия», и это значит «я не знаю», а не «никому не принадлежит». Если префикс тебе точно известен, ты добавляешь его через фильтр kwpp_autoload_praefixe; для собственного префикса плагин делает ровно то же самое.

Что можно переключить — и почему многое остаётся заблокированным

Кнопка «Переключить» появляется только тогда, когда одновременно выполнены два условия: опция занимает не менее 1 КБ и не принадлежит ни одному активному компоненту. Заблокированными таким образом остаются опции ядра WordPress (жёсткий список из populate_options плюс шаблоны theme_mods_*, widget_* и *_user_roles — они действительно нужны при каждом вызове), промежуточные хранилища (транзиенты относятся к глубокой очистке, где они исчезают совсем, а не просто загружаются позже), всё от активного плагина или от активной темы, и всё, что меньше 1 КБ, потому что там дополнительный отдельный запрос стоит дороже сэкономленных байт. Наведи мышь на неактивную кнопку: причина стоит рядом с ней как подсказка. Стоящий случай — это почти всегда неактивное или давно удалённое расширение, чьи строки просто остались лежать. Без действующей лицензии раздел находится в состоянии покоя — измерение и отображение продолжаются, но не переключается ничего.

Переключение, протокол, откат

Запись идёт через функцию ядра wp_set_option_autoload(), а не собственным UPDATE: только так потом очищаются нужные промежуточные хранилища, иначе внешний кеш объектов и дальше отдавал бы старое состояние. На установках без этой функции Kakapo ставит «no» и сам очищает alloptions, notoptions и отдельную запись. Перед записью строка ещё раз проверяется заново: существует ли она ещё, стоит ли она вообще ещё на «загружается» и какого она размера в этот момент — в протоколе должно стоять то, что действительно вынуто из загрузки. Если база данных не выполняет изменение, сообщение говорит об этом прямо, и ничего изменено не было. Протокол хранит до 200 записей со старым значением столбца, размером, моментом времени и именем пользователя. Откат возможен поштучно или сразу для всех; обратно записывается «загружается», потому что промежуточное значение WordPress «auto» через функцию ядра восстановить нельзя — исходное значение остаётся видимым в протоколе. Если опция тем временем исчезла совсем, например потому что плагин был удалён, Kakapo сообщает об этом и убирает беспредметную запись вместо того, чтобы утверждать «откачено».

Эта статья оказалась полезной?