Очень большой HTTP-запрос и многие небольшие запросы
Мне нужен 2D-массив (как Json) для отправки с сервера на клиент. Он будет размером около 400x400 с каждой записью около 4 символов текста. Таким образом, это составляет около 640 КБ данных.
Какой из следующих экстремальных подходов лучше?
- Я делаю большой HTTP-запрос всех данных за один раз.
- Я делаю 400 запросов - каждый из них запрашивает одну строку (около 1,6 КБ)
Я считаю, что оптимальный подход будет где-то посередине. Может ли кто-нибудь дать мне представление о том, какой может быть оптимальный размер одного запроса для этих данных?
Спасибо.
Ответы
Ответ 1
Если вы не имеете дело с медленными ( очень медленными по сегодняшний день стандартами) соединениями и действительно нуждаются инкрементными обновлениями, делайте это в одном запросе.
Это дает лучшую эффективность сжатие ответа и позволяет избежать накладных расходов дополнительные HTTP-запросы и заголовки ответов.
Ответ 2
Несколько соображений для выбора одного большого и нескольких маленьких:
- В случае с одним запросом вы не можете выполнять прогрессивную обработку данных по мере поступления данных; вам нужно дождаться прибытия всего пакета, прежде чем вы сможете что-либо сделать. Если это не удается, вам нужно начать все с нуля.
- В случае с несколькими запросами вы можете выполнять прогрессивную обработку данных. Однако теперь вам нужно рассмотреть возможность множественных сбоев и способы их восстановления.
- Несколько запросов требуют накладных расходов для каждого запроса. Это дополнительная пропускная способность, которую приложение будет потреблять.
- Некоторые агенты HTTP ограничивают количество одновременных запросов на том же сервере, и вам может понадобиться сделать некоторую логику, чтобы обойти это.
- Сжатие отклика будет работать лучше для случая с одним запросом.
- Несколько запросов не требуют выделения полной памяти для ваших данных. Конечно, 640 КБ - это не большой кусок памяти, так что это может не быть большим для вас, в зависимости от того, как часто вы его выделяете.
- В случае раннего завершения процесса (либо кнопка "Отмена", либо приложение завершается или браузер переходит от вашей страницы), единственный запрос будет по-прежнему завершать полную загрузку ответа; однако для случая с несколькими запросами любой запрос, который ваш код еще не запущен, не будет выполнен.
Честно говоря, я бы не беспокоился о последних двух и основывал свой выбор на 1) важна прогрессивная обработка данных; и 2) то, что ваш допуск приложения для сбоев и частичных данных.
Ответ 3
И вы должны иметь в виду, что на серверах могут быть уязвимости с большими запросами.