Использовал уже много раз ajax запросы в WordPress. Но в последнее время заметил, что все-таки они долго выполняются. Замерил время работы скриптов таких, как wp-ajax и впоследствии wp-load. Понял, что львиная доля времени выполнения запроса ложится на них (примерно 80-85% времени). От этого и возникает вопрос, можно ли как-то уменьшить это время, не используя стандартно wp-ajax, в обход него, чем это тогда грозит? Или, может, используя его, но, может, как-то оптимизируя работу его?
Возможности есть разные.
Прямые ajax-запросы
В принципе, ничто не мешает делать прямой ajax-запрос к своему обработчику php. Никакие функции WordPress при этом работать не будут, но если у вас совсем простой запрос к серверу (мне сложно даже придумать осмысленный пример), то использовать такой вариант можно. В безопасности, правда, будет дыра, но об этом ниже.
Сокращение времени выполнения
При обычном обращении к странице WordPress выполняет инициализацию в три этапа:
/wp-load.php - загрузка библиотеки WordPresswp(); - установка главного запроса WordPress/template-loader.php - загрузка темыПри выполнении ajax-запроса вызывается только /wp-load.php, т.е. и так WP выполняет сокращённую инициализацию. Правда, не стоит забывать, что при этом подключаются все плагины. Медленная загрузка, в первую очередь, вызвана кодом плагинов. Попробуйте выполнить ajax на голом WP, и вы увидите разницу.
Так что рецепт тут такой - с помощью mu-плагина отключить (при определённых запросах!) некоторые плагины. mu-плагины загружаются раньше всех остальных, и это единственное правильное место отключения плагинов "на лету".
Безопасность
Система выполнения ajax-запросов в WordPress через admin-ajax.php придумана, в том числе, с целью обеспечения безопасности. Инициализация библиотеки позволяет использовать функции WordPress, связанные с проверкой nonce. Число, используемое один раз (Number used ONCE - nonce) - это некая метка, позволющая проверить, что запрос сделан с вашего сайта и уйти от XSRF (Cross- Site Request Forgering - межсайтовая подделка запросов). И хотя на самом деле число это используется не один раз, такая проверка ajax совершенно необходима.
Поэтому прямые запросы крайне не рекомендуются.
TL;DR
Оптимизируйте число плагинов, установленных на сайте, их работу при ajax - вот реальный путь сокращения времени запроса.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости