2010-06-29 18 views
27

Necesito una matriz 2D (como Json) para enviar desde el servidor al cliente. Tendría un tamaño de alrededor de 400x400 con cada entrada alrededor de 4 caracteres de texto. Eso hace que sea alrededor de 640 KB de datos.Solicitud HTTP muy grande frente a muchas solicitudes pequeñas

¿Cuál de los siguientes enfoques extremos es mejor?

  1. Realizo una gran solicitud HTTP de todos los datos de una vez.
  2. hago 400 peticiones - cada uno pidiendo una sola fila (en torno al 1,6 KB)

creo enfoque óptimo sería en algún lugar en medio. ¿Alguien podría darme una idea de cuál podría ser el tamaño de solicitud único óptimo para estos datos?

Gracias.

Respuesta

37

A no ser que se trata de lento (muy lento para los estándares de hoy en día) conexiones y actualizaciones realmente necesidad incrementales, lo hacen en una sola solicitud.

Eso le da mejor eficiencia para compressing the response, y evita la sobrecarga del extra HTTP requests and response headers.

+3

+1 - y evita la sobrecarga de los viajes redondos. Incluso a 20 ms ... 400 solicitudes generarían 8000ms de sobrecarga = 8 segundos. A 80ms ... (muy lejos), esto sería 32 segundos desperdiciados. – TomTom

+0

Muchas gracias a David y Tom.Eso fue realmente útil. :) –

+2

¡Bien, @TomTom no factorizaste solicitudes paralelas ...! solo 20 ms al principio y al final con una conexión perfecta si no hay límite en las conexiones simultáneas :) Corrígeme si estoy equivocado, solo 400 x (cantidad de tiempo necesaria para procesar los encabezados) y no 400 x RTT –

47

par de consideraciones para la elección de un gran frente a varios pequeños:

  • En el caso de solicitud única, no se puede hacer de procesamiento de datos progresiva a medida que lleguen los datos; debe esperar a que llegue el paquete completo antes de poder hacer nada. Si falla, debe comenzar todo desde cero.
  • En el caso de solicitudes múltiples, puede hacer un procesamiento de datos progresivo. Sin embargo, ahora debe considerar el potencial de múltiples fallas y cómo recuperarse de ellas.
  • Las solicitudes múltiples incurren en gastos generales para cada solicitud. Este es el ancho de banda adicional que consumirá la aplicación.
  • Algunos agentes de HTTP limitan el número de solicitudes simultáneas al mismo servidor, y es posible que deba hacer algo de lógica para evitarlo.
  • La compresión de respuesta funcionará mejor para el único caso de solicitud.
  • Las solicitudes múltiples no requerirán que asigne la memoria completa para sus datos. De acuerdo, 640 KB no es una gran parte de la memoria, por lo que puede no ser una gran consideración para usted, dependiendo de la frecuencia con la que lo asigne.
  • En el caso de finalización anticipada del proceso (ya sea un botón Cancelar o la aplicación finaliza o el navegador navega fuera de su página), la única solicitud finalizará la descarga de la respuesta completa; sin embargo, para el caso de solicitudes múltiples, no se ejecutará ninguna solicitud cuyo código no haya comenzado todavía.

Honestamente, no estaría tan preocupado por los dos últimos y basaría mi elección en 1) es el procesamiento de datos progresivo importante; y 2) cuál es su tolerancia de aplicación para fallas y datos parciales.

+7

+1 Me parece una respuesta mucho mejor que la actualmente aceptada para este caso, ya que proporciona una buena comparación de las dos opciones en lugar de una respuesta directa. – Wingblade

Cuestiones relacionadas