Бортовой журнал. Как уменьшить нагрузку на сервер с помощью admin-ajax в WordPress Admin ajax php долго грузится

Создать данный пост меня заставила проблема, которая все настойчивее стала стучаться на мой сайт. Проблема — открытие страниц сайта и работа в админпанели. Они стали настолько сильны и часты, что стало затруднительным составить даже небобольшое сообщение. Соединение с сервером постоянно пропадало. Высокая нагрузка на CPU, а значит превышение так называемого мягкого лимита происходила постоянно; на почту очень часто стали проиходить сообщения от Метрики и плагина Jetpack, о том что сайт часто бывает недоступен, даже в тот момент, когда я в нем не работал. Короче — ужас ужасный снова настиг меня на проблеме скорости работы сайта. И я снова обратился в службу подержки на своем хостинге «Джино»

Ответ пришел незамедлительно, а при дальнейшем диалоге с небольшими пояснениями, я понял суть проблем и смог их исправить.

Поддержка хостинга прежде всего обратила мое внимание на большое количество обращений к /wp-admin/admin-ajax.php. «Обращения создают действия в административной панели сайта. Такое поведение в ней характерно, если какой-то из плагинов работает не корректно. Отключайте плагины сайта по очереди и следите за его работой. Обнаружив проблемный плагин, попробуйте его обновить или установить стабильную версию, или замените аналогом, с которым не возникает проблем».

Плагинов на моем сайте установленно довольно много и проверять каждый в отдельности очень проблематично. Поэтому я обратил внимание на ссылку, которую мне оставили из техподдержки на плагин Heartbeat Control . Его установка и некоторые другие настройки решили мою проблему!

Служба техподдержки так же обратила на еще одну проблему и предложила провести некоторые действия в коррекции кода в файле wp-cron.php. Но об этой проблеме в конце сообшения.

Ну а теперь давайте перейдем к сути вышесказанного.

Что такое Heartbeat API на WordPress и как его ограничить

Слово «Heartbeat» переводится как «Сердцебиение» и назван он так для API не зря. Она обеспечивает определенную частоту запросов к серверу. По умолчанию и в зависимости от страницы админпанели, это происходит с разными интервалами: при редактировании записей — каждые 15 сек, при работе в Консоли — одну минуту. WordPress Heartbeat API — это функция, которая обеспечивает:

  • Автосохранение при создании сообщений;
  • Блокировки записей или страниц для других редакторов сайта, пока запись или страницу редактирует один человек;
  • Обновление информации о том, что пользователь всё ещё находится в административной части (консоли или на странице редакции записей).

Данная функция, прописанная в движке WordPres очень важна, особенно тогда, когда на сайте могут работать несколько авторов и администрирование бывает коллективным. Однако она же может стать причиной «торможения» сайта и значительного увеличения нагрузки на сервер.

Если вы являетесь единственным автром сайта, то функцию Heartbeat API можно либо полностью отключить, либо настроить на удобный вам режим, позволяющий регулировать нагрузку на сервер.

Полное отключение Heartbeat API

Этот жесткий сценарий, который я не пожелал сделать, заключается в том, что нужно проделать некоторую операцию в файле functions.php вашей темы, установленной в данный момент на сайте.

Add_action("init", "stop_heartbeat", 1); function stop_heartbeat() { wp_deregister_script("heartbeat"); }

Разумеется, при обновлении этой темы или ее замены на другую, придется эту операцию делать заново.

Плагин Heartbeat Control и его настройки

Настроек всего и две и, несмотря на то, что плагин на английском, для незнающих этот язык, не трудно будет в них разобраться. Напомню, что настройка плагина по умолчанию (use default) означает, что Heartbeat API не отключен ни на одной из страниц, а интервал запросов к серверу — 15 сек. То есть все выглядет так, словно этого плагина на вашем сайте нет.

4. Использование настроек для страниц админпанели

Для ясности делаю пояснения:

1. use default — использовать Heartbeat API по умолчанию;
2. disable everywhere — отключить Heartbeat API везде;
3. disable on dashboard page — отключить Heartbeat API на приборной страницe (консоль);
4. allow onli от post edit pages — использовать Heartbeat API только при редактировании страниц.

2. Корретировка частоты запросов к серверу

Тут все очень просто. Нужно лишь выбрать подходящий интервал запросов к северу. Чем реже «пульс» — тем реже запросы — тем меньше нагрузка на сервер.

После совершения настроек сохраняем измения.

Поскольку автоматическое сохрание сохрание записей во время их редактирования остается желанной функцией (удалить лишние редакции можно потом чисткой специальными плагинами), а потерять почти завершенную запись по каким-либо техническим причинам неприятно (пропал интернет или связь с сервером и т. п.) очень нежелательно. Поэтому настройку для перврого блока вполе можно установить в режим «use default» но вполне достаточно будет сделать настройки во втором блоке, так как установка таймера частоты запросов к файлу admin-ajax.php. в 60 сек. сократит расход ресурсов на данные запросы на целых 75% !

Разумеется, существует много причин замедления работы сайтов. Не имея должных знаний и работая с ними мы просто не знаем, что является причинами таких весьма нежелательных процессов. Наверное нам нужно чаще обращаться к специалистам, в том числе и в техподдержку хостинга.

В начале статьи я упомянул о том, что работники поддержки обратили мое внимание еще на одну причину сложности в работе моих сайтов. Причина —

Нежелательные процессы в файле wp-cron.php

Техподдержка в результате исследований работы моих сайтов, обратила внимание, что на них «наблюдаются процессы wp-cron.php». Они рекомендовали: «Если выполнение этого файла вызывает нездоровую нагрузку на сервер - можно отключить эти задачи».

  1. Для этого в файл конфигурации WordPress wp-config.php добавляем строку:
    define(‘DISABLE_WP_CRON’, ‘true’);
    Добавить её можно где-то после установки языка, т.е. после строки
    define(‘WPLANG’, ‘ru_RU’);
  2. Другой вариант решения - в самом файле wp-cron.php закомментировать строку: wp-cron.php ignore_user_abort(true); Для этого перед ней нужно установить двойной слэш. Получится вот так: //ignore_user_abort(true); Находится данная строка в 12 ряду файла.

Это все, друзья.

(Visited 304 times, 1 visits today)

Не иссякнет поток полезных советов пользователям популярнейшей в мире бесплатной CMS. Именно потому, что популярна и потому, что у нее есть особенности, о которых важно помнить. Ранее мы говорили о том, как:

Сегодня мы немного расширим вторую тему и отключим очень ресурсоемкий и не всем нужный механизм WordPress под названием HeartBeat API .

HeartBeat API — функционал WordPress, который обеспечивает такие вещи, как:

  • Автосохранение;
  • Блокировка записи или страницы для других редакторов сайта, пока запись или страницу редактирует один человек;
  • Обновление информации о том, что пользователь всё ещё находится в административной части (консоли).

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

На деле это выражается в постоянных запросах с интервалом в 15-30 секунд (в зависимости от установленной версии) к одному конкретному файлу admin-ajax.php практически с любой страницы административной панели. Ситуация усугубляется, если вы предпочитаете держать открытыми сразу несколько вкладок консоли: запросы отправляются автономно из каждой вкладки. По сути, HeartBeat API является самым ресурсоёмким из всех стандартных механизмов WordPress .

Эту функцию мы сегодня и отключим. Отключить HeartBeat API для вашего сайта на WordPress рекомендуется, если:

  • В целом вашим сайтам на аккаунте хватает ресурсов, значительные превышения происходят только во время работы в консоли ;
  • Сайт редактируете только лично вы (то есть у сайта 1 редактор, а не несколько).

Внимание! Данное решение подойдет не всем сайтам. Это зависит от установленной на сайте темы, плагинов и индивидуальных настроек сайта. Вы можете опробовать его и, если оно окажется несовместимо с каким-либо из элементов сайта или отразится на важной для вас функции сайта, вы всегда можете включить HeartBeat API, вернув прежние настройки.

Как выключить HeartBeat API

Для этого необходимо внести изменения в файл functions.php внутри папки с текущей активной темой (шаблоном) сайта. Это можно сделать в файловом менеджере или через FTP.

Путь к файлу functions.php выглядит так: /путь_до_корня_сайта/wp-content/themes/имя_темы/functions.php.

Допишите в самом начале файла после тега

Add_action("init", "stop_heartbeat", 1); function stop_heartbeat() { wp_deregister_script("heartbeat"); }

Эти строчки отключают HeartBeat для всего сайта.

Плагин HeartBeat Control

Есть и менее радикальный вариант решения, чем полное отключение HeartBeat API. Оно обеспечивается специальным плагином HeartBeat Control . Установите его, активируйте и перейдите к настройкам («Инструменты» -> «HeartBeat Control»). В настройках вы можете выбрать следующие параметры:

1. Отключить ли HeartBeat для всего сайта или разрешить его использование только для отдельных его разделов, например, для страницы редактирования и публикации записей в административной панели.

2. Частота запросов к файлу admin-ajax.php. По умолчанию она может быть 15 секунд — измените это значение, например, до 60 секунд, и тем самым сократите расход ресурсов на данные запросы на целых 75% !

О чем важно помнить

  • Отключив HeartBeat API, мы отключили функцию автосохранения. Периодически сохраняйте редактируемые страницы и записи (по мере реальной необходимости).
  • Поскольку отключение HeartBeat API производится на уровне темы (шаблона) сайта, то, как только вы измените тему (шаблон) оформления, HeartBeat API снова будет работать. Процедуру отключения необходимо будет повторять для каждой новой темы, которую вы начинаете использовать на сайте.
  • То же самое касается и обновления текущей темы: после обновления процедуру отключения требуется повторить.

Желаем вам приятной работы!

Всем привет. Продолжаем тему ускорения сайта на wordpress. В статье мы убрали лишнее из файлов, но еще не все. Вообще wordpress тем и хорош, что дает возможность изменять код так, как хочется, под разные желания.

Когда вы покупаете хостинг, то, конечно, вы прикидываете сколько памяти надо для сайта и какая нагрузка будет. И, если вы ограничены в средствах, то надо бы поэкономить эти параметры.

Есть такой механизм в движке – HeartBeat API . Зачем он нужен? Что это такое?

HeartBeat API отвечает за

  • за автосохранение;
  • за блокировку страницы или записи для всех других администраторов сайта, пока вы что-то там редактируете;
  • за обновления информации о присутствии пользователя в консоли.

Вы понимаете, надеюсь, что в этот момент происходит просто пожирание ресурсов, ведь идет постоянные запросы на хостинг к файлу admin-ajax.php. А если вы любите открывать сразу несколько вкладок админпанели, то это вообще пипец. Простите меня за жаргон. Запросы-то отправляются автономно для каждой вкладки.

По существу, HeartBeat API – это наиболее ресурсоёмкий механизм из всех в движке WordPress .

Нужен ли вам такой механизм? Это конечно каждый сам для себя решает. Мне вот не нужен.

Считается, что есть смысл отключить, вы являетесь единственным администратором, а также, если в вашем аккаунте ресурсов достаточно, но во время нахождения админа в консоли нагрузки нарастают, причем значительно.

По-моим наблюдениям, после выключения HeartBeat API, занимаемый объем моего сайта уменьшился почти 2,5 раза! Я серьезно. Жаль, не сделала скрин, а возвращаться в исходное состояние не хочется.

Как ускорить сайт на wordpress, выключив HeartBeat API

Отключение HeartBeat API кодом

Все очень просто. Надо дописать в начало файла functions.php, сразупосле тега

Add_action("init", "stop_heartbeat", 1); function stop_heartbeat() { wp_deregister_script("heartbeat"); }

И будет вам счастье.

Внимание! Этот код может не подойти вашему сайту. Все зависит от установленных темы, плагинов и настроек. Можно попробовать и, если код будет несовместим с каким-нибудь элементом сайта или вообще что-то сломается и не будет работать, всегда можно все вернуть назад. Просто сотрите код.

Плагин HeartBeat Control

Не дружите с кодами и боитесь навредить своему сайту? Есть для вас такое решение.

Установите плагин HeartBeat Control (в консоли выбрать плагины, установить новый, ищем в поиске плагин, установка и активирование).

Переходим в настройки (в консоли Инструменты -> HeartBeat Control). В настройках выбрать можно такие параметры:

1. Отключить или нет HeartBeat для всего сайта или использование его для некоторых разделов.

2. Можно и нужно отредактировать частоту запросов к файлу admin-ajax.php. При установке она обозначена, скорее всего, 15 секунд. Если изменить, скажем, до 30 секунд, то расход ресурсов уменьшиться на эти запросы сразу на 25%! А если время еще увеличить, то еще больше. Впечатляет, да?

Внимание!

  • Отключение HeartBeat API ведет к отключению функции автосохранения. Иногда все-таки сохраняйте страницы и записи при их редакции (по мере необходимости).
  • Отключение HeartBeat API происходит в конкретном шаблоне. Если вы шаблон поменяете, то все надо сделать заново.
  • Если вы обновили текущую тему, то после обновления отключение надо повторить.

Всем удачи!

2016-05-05T09:48:44+00:00 Надежда WordPress как ускорить wordpress

Всем привет. Продолжаем тему ускорения сайта на wordpress. В статье Как ускорить wordpress с помощью минимизации CSS, HTML и Javascript мы убрали лишнее из файлов, но еще не все. Вообще wordpress тем и хорош, что дает возможность изменять код так, как хочется, под разные желания. Когда вы покупаете хостинг, то, конечно, вы прикидываете...

Надежда Трофимова [email protected] Administrator Блог сайт

Возможно Вас также заинтересует:

Как сделать Фавикон для сайта

Фавиконом называется это красивый значок, который Все видят возле названия сайта в браузере. Фавикон позволяет выделиться сайту, как в закладках браузера, так и в...

Красивые кнопки для сайта

Всем доброго времени суток. Вдруг есть желающие на своем сайте разместить красивые кнопки, а найти они не могут. В самом деле в поисковиках я пыталась...

Пример 404 страницы

Здравствуйте, уважаемый читатель моего блога. Эта статья абсолютно ни о чем, просто, наконец то руки дошли до страницы 404.

Как и куда прописываются теги Title и Description

Что это такое - теги Title и Description? Эти теги необходимы для оптимизации Вашего сайта. Если неправильно прописаны теги, поисковые системы не проиндексируют Вашу статью. Много...

Распространенный сценарий при работе с WordPress – диагностика повышенного использования admin-ajax.php. Если вы некоторое время работаете с WordPress, вы, скорее всего, сталкивались с этой проблемой при запуске сторонних тестов скорости или проверке серверных логов доступа. Обычно повышенное использование admin-ajax.php связано с применением сторонних плагинов либо частыми некэшируемыми запросами из панели администратора, основанными на Heartbeat API (к примеру, автосохранение черновиков). Очень важно сразу же выявлять такие высокие всплески обращений к admin-ajax.php, поскольку они могут вести к тому, что сайт будет недоступен. Ознакомьтесь с приведенными ниже рекомендациями по устранению проблем с admin-ajax.php в WordPress.

Что представляет собой файл admin-ajax.php?

Сам по себе файл admin-ajax.php не является плохим при грамотном его использовании. Он выступает частью ядра. Файл был добавлен командой разработчиков WordPress в релизе 3.6. Цель admin-ajax.php – создать соединение между браузером и сервером с помощью AJAX. Это позволяет использовать расширенные функции, среди которых улучшенное автосохранение, отслеживание версий, таймауты логина, управление сеансом, а также уведомления о блокировке записи при редактировании ее несколькими авторами. Все эти возможности великолепны, особенно для тех пользователей, которые поддерживают сайты с несколькими авторами и администраторами.

«Идея состоит в том, чтобы реализовать относительно простой API, который будет отправлять XHR запросы на сервер каждые 15 секунд и запускать события (или callback) при получении данных. Другие компоненты тоже смогут «подцепляться» или получать уведомления об активности других пользователей. Это можно применять для блокировки одновременного редактирования виджетов или меню, либо выполнения других задач, требующих регулярных обновлений с сервера»

Если вы не являетесь технически подкованным пользователем, то в таком случае единственная ситуация, которая будет вам важна в контексте admin-ajax.php – это попытка понять, почему этот файл замедляет скорость в тестах (к примеру, в Pingdom). Либо вы можете увидеть кучу запросов к этому файлу в логах доступа хостинга.

Появление admin-ajax.php в тестах скорости и логах доступа обычно является результатом двух различных сценариев: одного во фронтэнде и второго в бэкэнде. Об этом мы поговорим далее.

Плагины могут приводить к замедлению admin-ajax.php

Самая популярная проблема, с которой сталкиваются пользователи в контексте admin-ajax.php, вызвана сторонними плагинами. Обычно это видно во фронтэнде и отображается в тестах скорости. Разработчики используют этот файл или AJAX для добавления функционала к своим плагинам. Если вы видите запрос к admin-ajax.php, это еще не означает, что он обязательно будет замедлять сайт. AJAX загружается после представления страницы, и некоторые запросы могут загружаться асинхронно. Но это не всегда означает и то, что разработчик выполнил загрузку грамотно и написал эффективный код в плане производительности.

Ниже представлены примеры того, как мы быстро диагностировали замедление работы admin-ajax.php. Мы использовали GTmetrix, поскольку он позволяет нам изучать данные отдельных записей и ответов. Pingdom, к сожалению, не позволяет нам видеть запросы данных в формах. Вы также можете использовать Google Chrome Devtools или WebPageTest.

Высокая нагрузка на admin-ajax.php при использовании плагина Visual Composer

Ниже приведен наш WordPress сайт, на котором мы столкнулись с очень высокими задержками при использовании admin-ajax.php. Как вы можете видеть по GTmetrix, задержка запросов к admin-ajax.php составляет более 8 секунд. Остальная часть «водопада» выглядит нормально, но такую задержку нужно обязательно решать владельцам сайтов.

Если вы щелкнете по запросу POST admin-ajax.php, вы увидите следующие три вкладки: Headers, Post и Response. При диагностике рассматриваемых нами проблем нас будут интересовать только вкладки Post и Response. Подсказки можно видеть во вкладке Response. Мы видим, что часть запроса связана со скриптом vc_shortcodes-custom-css.

Быстрое копирование и вставка в Google помогают понять, что проблема вызвана плагином Visual Composer.

Следующий шаг для пользователя – убедиться в том, что плагин Visual Composer полностью обновлен. Если да, то в таком случае необходимо обратиться к разработчикам плагина и рассказать им о проблеме с admin-ajax.php. На самом деле это достаточно распространенная проблема, если судить по постам на Stack Overflow. Если разработчик не способен решить ее в своем плагине, всегда найдется несколько альтернативных плагинов, которые делают примерно то же самое – в этом и состоит мощь WP. К примеру, если вам нужны билдеры страниц, то вы можете попробовать Beaver Builder или Elementor.

Высокая задержка с admin-ajax.php из-за плагина Notification Bar

Второй пример, с которым столкнулись мы сами, произошел после установки стороннего плагина. Мы заметили резкий подъем обращений к admin-ajax.php.

Опять же, если вы нажмете на запрос POST admin-ajax.php, то вы сможете исследовать все в деталях. Мы видим, что в данных присутствует строка «action=mtsnb_add_impression&bar_id=88&ab_variation=none».

Как правильно, первая часть действия post обычно относится к CSS классу плагина. Мы делаем быстрый поиск в Google по «mtsnb» и обнаруживаем, что этот класс используется в плагине Notification Bar, который запущен у нас на сайте.

Если вы разработчик, то есть и другие способы отследить, какой плагин может генерировать ответ POST, однако мы считаем, что и описанные в статье методы являются очень эффективными.

Дедовский метод определения источника admin-ajax.php запросов

Выше мы привели несколько простых способов поиска плагина на WordPress сайте, который может приводить к данной проблеме с admin-ajax.php. По нашему опыту, эти способы работают в 99% случаев. Однако бывает и так, что данные POST или действия могут быть не такими понятными, а потому вам придется двигаться старым проверенным путем. Просто отключите все плагины на своем WordPress сайте. Запустите тест скорости. Если admin-ajax.php нигде не обнаружится, то включайте по очереди каждый плагин и проводите тест скорости. Таким образом вы быстро выявите проблемный плагин.

CPU-проблемы с admin-ajax.php в бэкэнде

Вторая серьезная проблема заключается в том, что WordPress Heartbeat API использует admin-ajax.php для запуска вызовов AJAX от веб-браузера, что может вести к высокой нагрузке на CPU. Каждый AJAX запрос также загружает полный WordPress бэкэнд в обход всех форм кэширования. Как правило, вы не увидите этого в тестах скорости. Это особенно важно знать тем, кто использует дешевые виртуальные хостинги, поскольку у них нет большого пространства для маневров, когда дело касается CPU. Такая проблема всплывала с хостингом HostGator ранее.

Один из сценариев, с которым вы должны быть очень осторожны – автоматическое сохранение в WordPress и наличие открытых вкладок. К примеру, мы запустили новый проект на нашем сайте и оставили вкладку открытой. Heartbeat API по умолчанию опрашивает файл admin-ajax.php каждые 15 секунд, чтобы сделать автоматическое сохранение. Это видно по журналам доступа. Если бы мы оставили вкладку открытой на день, то один пост мог сгенерировать 5760 запросов за сутки.

Это слишком много запросов в бэкэнде для одного человека. Представьте, что будет, если у вас на сайте есть несколько редакторов. Эти запросы увеличатся в геометрической прогрессии. Мы сталкивались с таким во время нашего исследования DARTDrones, в котором мы помогали расширить их WooCommerce сайт для Shark Tank. У них было свыше 4100 вызовов admin-ajax.php за сутки, при этом посетителей было только 2000. Это не самое лучшее соотношение запросов к визитам. Наше исследование показало, что большинство запросов шло из консоли – они генерировались из-за того, что администраторы обновляли сайт, готовя его к показу.

Есть способ обнаружения некоторых проблем с обращениями к admin-ajax.php в бэкэнде, когда дело касается автосохранений, ревизий, блокировки записей и т.д. Для этого необходимо установить плагин Heartbeat Control .

Плагин Heartbeat Control в данный момент установлен на более 50 000 сайтов и имеет рейтинг 5 из 5. Прошло уже 2 года с момента его обновления, но он работает все так же, поскольку Heartbeat API тоже не обновлялся.

Плагин позволяет вам управлять частотой обращений к WordPress Heartbeat API с помощью пары щелчков мыши. Первая опция дает возможность управлять расположением heartbeat – к примеру, отключать его везде или разрешать только на страницах редактирования записей. Мы рекомендуем использовать последний вариант, поскольку полное отключение плагина может вести к тому, что некоторые плагины, зависящие от Heartbeat API, могут перестать работать.

Вторая опция позволяет вам задавать частоту опроса. Изменение с 15 сек до 60 сек позволит вам значительно сэкономить количество запросов и сохранить серверные ресурсы (снизив нагрузку на ЦП).

Вы можете также использовать премиум-плагин, такой как perfmatters , чтобы отключать heartbeat, менять частоту опросов, а также модифицировать интервал автосохранения.

Заключение

Как вы можете видеть, есть несколько быстрых и простых опций для диагностирования и устранения проблем с admin-ajax.php. Как правило, они появляются из-за сторонних плагинов, которые могут конфликтовать друг с другом или иметь плохую кодовую базу.

Сталкивались ли вы с такой проблемой на своем сайте? Если да, то поделитесь своими историями.