Очень большой HTTP-запрос против множества маленьких запросов - PullRequest
38 голосов
/ 29 июня 2010

Мне нужен 2D-массив (как Json) для отправки с сервера на клиент. Он будет размером около 400х400, каждая запись будет содержать около 4 символов текста. Таким образом, это составляет около 640 КБ данных.

Какой из следующих экстремальных подходов лучше?

  1. Я делаю большой HTTP-запрос всех данных за один раз.
  2. Я делаю 400 запросов - каждый запрашивает одну строку (около 1,6 КБ)

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

Спасибо.

Ответы [ 3 ]

64 голосов
/ 29 июня 2010

Несколько соображений по выбору одного большого против нескольких маленьких:

  • В случае одного запроса вы не можете выполнять последовательную обработку данных по мере поступления;вам нужно дождаться полного пакета, прежде чем вы сможете что-либо сделать.Если это не удается, вам нужно начать все с нуля.
  • В случае нескольких запросов вы можете выполнять последовательную обработку данных.Тем не менее, теперь вы должны рассмотреть возможность множественных сбоев и способы их устранения.
  • Несколько запросов несут накладные расходы на каждый запрос.Это дополнительная полоса пропускания, которую ваше приложение будет использовать.
  • Некоторые HTTP-агенты ограничивают количество одновременных запросов к одному и тому же серверу, и вам может потребоваться некоторая логика, чтобы обойти это.
  • Ответсжатие будет работать лучше для случая с одним запросом.
  • Для нескольких запросов вам не потребуется выделять всю память для ваших данных.Конечно, 640 КБ - это не такой большой объем памяти, так что это может быть не слишком важным для вас, в зависимости от того, как часто вы будете его выделять.
  • В случае досрочного прекращения процесса (либо кнопка «Отмена», либо приложение закрывается, либо браузер отключается от вашей страницы), один запрос все равно завершит загрузку полного ответа;однако, в случае множественных запросов, любой запрос, который ваш код еще не запустил, не будет выполнен.

Честно говоря, я бы не стал беспокоиться о последних двух и основал бы мой выбор на1) важна ли прогрессивная обработка данных;и 2) какова ваша терпимость приложения для сбоев и частичных данных.

47 голосов
/ 29 июня 2010

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

Это дает вамлучшая эффективность для сжатия ответа и позволяет избежать дополнительных затрат на дополнительные HTTP-запросы и заголовки ответа .

3 голосов
/ 28 декабря 2013

И вы должны помнить, что серверы могут иметь уязвимости с большими запросами .

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