2009-05-22 657 views
9

A preguntas más genéricas para comenzar. ¿Existe un límite para el tamaño de respuesta de una solicitud de Ajax, si es una solicitud JSON?ajax request browser limit

Estoy transfiriendo grandes cantidades de datos a través de una solicitud JSON y ejecutándome con un mensaje de error que indica que la cuota de script se ha agotado en FF3. Ahora en FF2 la cuota era de 4mb pero en FF3 es de 640kb. Me pregunto si esto es específico de JSON de alguna manera. ¿Las solicitudes ajax normales tienen un límite de tamaño de respuesta? ¿Uno que puede ser impuesto por el navegador? Si una solicitud que no es JSON no tiene los mismos problemas con la cuota de script stack, ¿cómo podría categorizar los datos que regresan? XML tal vez ... No estoy seguro de si estaría dentro de los límites de la especificación w3c con mis datos para hacerlo.

Respuesta

2

Sospecho que los límites son diferentes si está enviando frente a la recepción de datos, así que supongo que se trata de enviar datos al cliente. JSON es solo un tipo de datos, realmente. Lo que realmente está haciendo, sospecha, es hacer una solicitud GET para un script de JavaScript que debería limitarse a un tamaño razonable. El wiki de JSON también dice usar el método XMLHTTPRequest, que podría superar tu límite, pero aún necesitarías un proxy para evitar las limitaciones de scripts entre dominios y usar un tipo de mime más sensible, como html, xml, binary, etc. Si está colocando imágenes en el JSON recuerde que pueden ser enlaces ya que no hay problemas entre dominios con esas solicitudes.

Revise también que no es la cantidad de solicitudes que le causan problemas, los navegadores tienen límites allí también. A veces tan bajo como 2.

1

Como regla general trato de mantener mis datos AJAX pequeños. Si tengo que pasar una gran cantidad de datos, lo recuperaré con varias llamadas. Entonces, si estoy cargando una tabla, tendré un método que me dirá cuántos registros se van a devolver, y otro método para devolverme los registros en grupos de # (normalmente 20 para mí).

Lo bueno de hacer esto es que puedo cargar la página mientras recupero datos, y el usuario no está esperando una gran carga útil.

Además, sería mejor usar JSON en lugar de XML. JSON es generalmente una carga más pequeña que XML, y muchas pruebas han demostrado que es más fácil para el navegador cargarlo.

3

iirc esto fue un error en FF3 el año pasado pero creo (sí, lo comprobé here) es fijo. Mirando hacia abajo los comentarios embargo, hay una nota:

Note: this test is dependent upon architecture and available memory. On a x86_64 machine with 2G and a 64bit build, it will fail with InternalError: script stack space quota is exhausted however on a x86_64 with 4G and a 64bit build it will pass.

Los comentarios también leen que este es un problema JS puro, lo que significa que aunque el formato de los datos estrictamente no importará, muy grandes porciones de JSON podrían estallar la pila JS donde las cadenas XML podrían no. Creo que solo tienes que intentarlo.

OTOH, está marcado como fijo, por lo que también hay que asegurarse de tener la última versión de FF.

1

No he encontrado ningún límite tangible, pero la interactividad de su usuario divide los datos grandes en varias llamadas. Las tablas grandes tardan una eternidad en ser transferidas a través de ajax, especialmente si el usuario ejecuta IE. Datos grandes + Ajax + IE = bloqueo de IE.

2

Creo que annakata tiene razón.

El texto del mensaje de error también sugiere que el problema está ocurriendo debido a la profundidad de su estructura json, no al tamaño KB de la misma.

Lo que significa es que cuando evalúa su json, el motor de JavaScript usa una pila durante el análisis del json. Esta pila está alcanzando su límite máximo debido a la profundidad (cantidad de elementos anidados) en su estructura json.

Es posible que desee comprobar si una estructura algo más plana es factible para sus necesidades.