Сколько накладных расходов имеет Ajax-запрос - PullRequest
0 голосов
/ 17 марта 2019

Я работаю над веб-приложением, которое должно обрабатывать большие объемы данных с сервера.

Данные могут быть «потоковыми» и обрабатываться порциями, поэтому для ускорения я разбиваю данные на пакеты и загружаю каждый пакет с помощью ajax.

Я использую обещания javascript для отправки следующего ajax-запроса, когда предыдущий получает его данные.

Каждый пакет составляет около 300 КБ, и обычно их 20.

Теперь мой вопрос: когда у меня нет разбитых пакетов (т.е. я загружаю один файл размером 6 МБ), моему браузеру / сети требуется около 4 секунд, чтобы это сделать.

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

Я ожидал, что при каждом запросе при отправке новых заголовков http будут некоторые издержки ... но удвоение скорости было шоком.

Я пытался перенести запросы ajax на веб-работника, думая, что основной поток, возможно, задерживает их, но происходит то же самое.

Есть ли способ ускорить этот процесс или существуют какие-либо протоколы javascript, которые позволили бы сохранить соединение открытым.

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

1 Ответ

1 голос
/ 17 марта 2019

Я считаю, что по умолчанию TCP-соединения в браузере также подлежат контролю перегрузки TCP.

Например, «Медленный запуск» увеличивает скорость чтения / отправки данных, чтобы не перегружать сервери получите базовую оценку того, какую нагрузку трафика может обработать сервер.

Если вы разбите свой 6-мегабайтный запрос на несколько запросов, возможно, вы заплатите штраф за «медленный запуск» за каждый запрос.

Больше информации здесь: https://en.wikipedia.org/wiki/TCP_congestion_control

Вы можете попробовать включить на сервере заголовки поддержки активности и посмотреть, улучшит ли это ситуацию.

...