ajax в WordPress

177
01 августа 2018, 09:10

Использовал уже много раз ajax запросы в WordPress. Но в последнее время заметил, что все-таки они долго выполняются. Замерил время работы скриптов таких, как wp-ajax и впоследствии wp-load. Понял, что львиная доля времени выполнения запроса ложится на них (примерно 80-85% времени). От этого и возникает вопрос, можно ли как-то уменьшить это время, не используя стандартно wp-ajax, в обход него, чем это тогда грозит? Или, может, используя его, но, может, как-то оптимизируя работу его?

Answer 1

Возможности есть разные.

Прямые ajax-запросы

В принципе, ничто не мешает делать прямой ajax-запрос к своему обработчику php. Никакие функции WordPress при этом работать не будут, но если у вас совсем простой запрос к серверу (мне сложно даже придумать осмысленный пример), то использовать такой вариант можно. В безопасности, правда, будет дыра, но об этом ниже.

Сокращение времени выполнения

При обычном обращении к странице WordPress выполняет инициализацию в три этапа:

  1. /wp-load.php - загрузка библиотеки WordPress
  2. wp(); - установка главного запроса WordPress
  3. /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 - вот реальный путь сокращения времени запроса.

READ ALSO
Обрезание изображения

Обрезание изображения

У меня стоит задача, сделать обрезание фото средствами выделения областиДля выделения области я использую плагин imgareaselect

175
Помогите разобраться с памятью

Помогите разобраться с памятью

Есть простая задача:

195
Не работает break point и выдает -nan(ind)

Не работает break point и выдает -nan(ind)

Решаю задачу по программированию (Работа с файлами)

221
Где взять LNK1104 не удается открыть файл “icmp.lib”?

Где взять LNK1104 не удается открыть файл “icmp.lib”?

Скачал исходники программы на C++Довольно старая, написана, на сколько я понял, в Visual Studio Express 2008 (возможно ещё в более старшей версии)

196