Сколько накладных расходов имеет Ajax-запрос

#javascript #ajax #performance #networking

#javascript #ajax #Производительность #сеть

Вопрос:

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

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

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

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

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

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

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

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

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

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

Комментарии:

1. Можете ли вы сделать снимок экрана вкладки «Сеть» в Chrome web developer tools, когда вы загружаете 20 «пакетов». Исходя из этого, вы должны быть в состоянии увидеть, что такое замедление, и помочь диагностировать. Размыть все конфиденциальные данные на скриншоте.

Ответ №1:

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

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

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

Дополнительная информация здесь: https://en.wikipedia.org/wiki/TCP_congestion_control

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

Комментарии:

1. Спасибо за идеи! Я использую nginx в качестве своего сервера, и функция keep alive включена по умолчанию. Но я думал в том же духе о каком-то алгоритме контроля перегрузки, влияющем на пакеты. Я собираюсь прочитать те ссылки, которые вы мне прислали, и я опубликую снимок экрана моей сетевой вкладки, когда у меня будет возможность.