jQuery $ .get () блокирует другие запросы - PullRequest
0 голосов
/ 25 июня 2018

Я занимаюсь разработкой веб-приложения и использую jQuery для выполнения асинхронных HTTP-запросов к моему API.У меня есть подробный вид, где вы можете увидеть много информации о конкретном объекте, хранящемся в базе данных.Поскольку существует много информации и данных, связанных с другими объектами, я выполняю различные вызовы своего API для сбора различной информации для своих представлений.

В «подробном представлении» у меня есть некоторые виджеты, которыепоказать запрашиваемую информацию.Для этого я делаю около 5-7 запросов HTTP GET к своему API.При использовании отладчика (как Safari, так и Firefox) я вижу, что некоторые запросы блокируют другие запросы, и страница занимает много времени, пока все не будет загружено и показано пользователю.

Я делаю запрос какthis:

$.get("api/api.php?object=myobject&endpoint=someendpoint", function(data) {
    // data is JSON formatted
    $("#my-widget input").val(data["name"]);
});

И еще один, например, такой:

$.get("api/api.php?object=anotherobject&endpoint=anotherendpoint", function(data) {
    // data is JSON formatted
    $("#other-widget input").val(data["somekey"]);
});

Если первый запрос длится немного дольше, он блокирует второй запрос до функции обратного вызова первогоЗапрос завершен.Но почему?Я думал, что эти вызовы асинхронные и неблокирующие.

Я хочу создать быстрое веб-приложение для компании, где запросы только выполняются внутри локальной сети, поэтому запрос должензаймет около 10-50 мс (или даже меньше).Но страница занимает около 10 секунд, чтобы показать всю информацию.

Я что-то не так делаю?Или есть JavaScript-фреймворк, который можно использовать именно для этой проблемы?Любая помощь приветствуется!

РЕДАКТИРОВАТЬ: Как вы можете видеть на скриншоте, запросы должны подождать несколько секунд, и если запрос выполняется, потребуется несколько секунд, пока ответ не вернется.

Если я вызываю URL-адрес прямо в браузере или выполняю GET-запрос, используя curl, это намного быстрее.

Screenshot of timeline

EDIT2:Спасибо @CBroe!Проблема была в блокировке записи файла сеанса.Пока файл сеанса заблокирован, никакой другой сценарий не может быть запущен, пока предыдущий сценарий не завершится.Я только что позвонил session_write_close() сразу после session_start(), и теперь он работает намного быстрее.

Внимание: Используйте session_write_close(), только если вам не нужно записывать в массив $_SESSION.После этого возможно чтение, но нет записи.(См. Эту тему для получения дополнительной информации: https://stackoverflow.com/a/50368260/1427878)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...