Использовал уже много раз 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 - вот реальный путь сокращения времени запроса.
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня стоит задача, сделать обрезание фото средствами выделения областиДля выделения области я использую плагин imgareaselect
Скачал исходники программы на C++Довольно старая, написана, на сколько я понял, в Visual Studio Express 2008 (возможно ещё в более старшей версии)