2009-05-22 4 views
9

Domande più generiche da avviare. Esiste un limite alle dimensioni della risposta di una richiesta Ajax, se si tratta di una richiesta JSON?limite browser richiesta ajax

Sto passando grandi quantità di dati attraverso una richiesta JSON e in esecuzione in un messaggio 'La quantità di stack di script è esaurita' in FF3. Ora in FF2 la quota era 4mb ma in FF3 era 640kb. Mi chiedo se questo sia in qualche modo specifico per JSON. Le normali richieste di ajax hanno un limite di dimensioni della risposta? Uno che può essere imposto dal browser? Se una richiesta non JSON non ha questi stessi problemi con la quota dello stack di script, come posso categorizzare i dati che ritornano? XML forse ... Non sono sicuro se sarei entro i limiti della specifica w3c con i miei dati per farlo.

risposta

2

Sospetto che i limiti siano diversi se si inviano o si ricevono dati, quindi presumo che si tratti di inviare dati al client. JSON è solo un tipo di dati, davvero. Quello che stai facendo davvero, è sospetto, sta facendo una richiesta GET per uno script javascript che dovrebbe essere limitato a una dimensione ragionevole. Anche il wiki per JSON usa il metodo XMLHTTPRequest, che potrebbe aggirare il limite, ma sarebbe comunque necessario un proxy per evitare limitazioni di scripting tra domini e usare un tipo mime più sensibile, come html, xml, binary, ecc. Se si inseriscono immagini nel JSON, ricordare che possono essere collegamenti in quanto non vi sono problemi tra domini con tali richieste.

Verificare inoltre che non sia il numero di richieste che causano problemi, anche i browser hanno dei limiti. A volte a partire da 2.

1

Come regola generale, cerco di mantenere i miei dati AJAX piccoli. Se devo passare una grande quantità di dati, lo recupererò con più chiamate. Quindi, se sto caricando un tavolo, avrò un metodo che mi dirà quanti record saranno restituiti, e un altro metodo per restituirmi i record in gruppi di # (di solito 20 per me).

La parte buona è che posso caricare la pagina mentre recupera i dati e l'utente non è in attesa di un grande carico utile.

Inoltre, sarebbe preferibile utilizzare JSON anziché XML. JSON è in genere un payload più piccolo rispetto all'XML e molti test hanno dimostrato che è più semplice caricarlo.

3

iirc questo era un errore su FF3 l'anno scorso ma credo (sì, controllato here) è fisso. Guardando in basso i commenti però, c'è questa 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.

I commenti anche letto che questo è un problema pura JS, il che significa che anche se il formato dei dati rigorosamente non importa, molto grandi blocchi di JSON potrebbe soffiare la pila JS dove le stringhe XML potrebbero non. Penso che devi solo provare.

OTOH, è contrassegnato come fisso, quindi è necessario accertarsi di essere anche dell'ultima versione di FF.

1

Non ho riscontrato alcun limite tangibile, ma l'interattività dell'utente, suddivide i dati di grandi dimensioni in più chiamate. Le tabelle grandi richiedono un'eternità per essere trasferite tramite ajax, soprattutto se l'utente esegue IE. Grandi dati + Ajax + IE = arresto anomalo di IE.

2

Penso che l'annakata abbia ragione.

Il testo del messaggio di errore suggerisce anche che il problema si sta verificando a causa della profondità della struttura JSON, non della dimensione KB di esso.

Ciò che significa è che quando si valuta il JSON, il motore JavaScript utilizza una pila durante l'analisi del JSON. Questo stack sta raggiungendo il limite massimo a causa della profondità (numero di elementi nidificati) nella struttura JSON.

Si potrebbe voler verificare se la struttura più piatta è fattibile per le proprie esigenze.