2010-06-29 14 views
27

Potrzebuję tablicy 2D (jako Json) do wysłania z serwera do klienta. Miałaby rozmiar około 400 x 400, przy czym każdy wpis zawierałby około 4 znaków tekstu. Tak więc wynosi około 640 KB danych.Bardzo duże żądanie HTTP i wiele małych próśb

Które z następujących ekstremalnych podejść jest lepsze?

  1. Wykonuję duże żądanie HTTP dla wszystkich danych za jednym razem.
  2. robię 400 wnioski - każdy z prośbą o jednym rzędzie (około 1,6 KB)

wierzę optymalnym rozwiązaniem byłoby gdzieś w środku. Czy ktokolwiek mógłby mi powiedzieć, jaki może być optymalny rozmiar pojedynczego zlecenia dla tych danych?

Dzięki.

Odpowiedz

37

Chyba że masz do czynienia z powolnym (bardzo powolny jak na dzisiejsze standardy) połączenia i naprawdę potrzeba przyrostowe aktualizacje, zrób to w jednym żądaniu.

To daje lepszą wydajność dla compressing the response i pozwala uniknąć nakładu pracy extra HTTP requests and response headers.

+3

+1 - a unikniesz napowietrznych podróży w obie strony. Nawet przy 20 ms ... 400 żądań spowodowałoby, że 8000ms narzut = 8 sekund. Na 80ms ... (daleko), straciłoby to 32 sekundy. – TomTom

+0

Wielkie dzięki dla Davida i Toma.To było naprawdę przydatne. :) –

+2

Cóż, @TomTom nie uwzględniłeś równoległych żądań ...! to tylko 20ms na początku i na końcu na doskonałym połączeniu, jeśli nie ma limitu na równoczesne połączenia :) Popraw mnie, jeśli się mylę, to tylko 400 x (ilość czasu potrzebnego na przetworzenie nagłówków), a nie 400 x RTT –

47

Kilka uwag o wyborze jednego dużego vs kilka małych:

  • W pojedynczym przypadku żądania, nie można zrobić progresywne przetwarzanie danych nadejścia danych; musisz poczekać na pełny pakiet, zanim będziesz mógł zrobić cokolwiek. Jeśli się nie powiedzie, musisz zacząć wszystko od zera.
  • W przypadku wielu żądań można wykonywać progresywne przetwarzanie danych. Musisz jednak wziąć pod uwagę możliwość wystąpienia wielu błędów i sposobów ich odzyskania.
  • Wiele żądań nakłada się na każde żądanie. To jest dodatkowa przepustowość, którą aplikacja będzie zużywać.
  • Niektóre agenty HTTP ograniczają liczbę równoczesnych żądań do tego samego serwera i może zajść potrzeba zrobienia logiki, aby to obejść.
  • Kompresja odpowiedzi będzie działać lepiej w przypadku pojedynczego żądania.
  • Wiele żądań nie wymaga przydzielenia pełnej pamięci dla danych. To prawda, że ​​640 KB to nie jest duża porcja pamięci, więc może to nie stanowić dla ciebie wielkiego problemu, w zależności od tego, jak często go przydzielisz.
  • W przypadku wcześniejszego zakończenia procesu (przycisk Anuluj lub aplikacja zostanie zakończona lub przeglądarka przejdzie z dala od strony), pojedyncze żądanie zakończy pobieranie pełnej odpowiedzi; jednak w przypadku wielu zgłoszeń żądanie, które nie zostało jeszcze uruchomione, nie zostanie wykonane.

Szczerze mówiąc, nie martwiłbym się o te dwa ostatnie i oparłbym swój wybór na 1) ważne jest stopniowe przetwarzanie danych; oraz 2) jaka jest tolerancja twojej aplikacji na awarie i częściowe dane.

+7

+1 Uważam, że jest to o wiele lepsza odpowiedź niż obecnie przyjęta dla takiego przypadku, ponieważ zapewnia dobre porównanie dwóch opcji, a nie bezpośredniej odpowiedzi. – Wingblade

Powiązane problemy