2009-10-21 4 views
0

J'utilise prototype.js et son objet Ajax pour implémenter un widget graphique interactif. Je génère une requête XML pour les données que l'utilisateur veut, POST le serveur au serveur avec une requête Ajax, et il semble prendre une éternité avec Firefox. La console Firebug semble montrer que le POST se termine avec 200 OK en environ 700 ms, mais le gestionnaire onInteractive() que j'ai installé (quel prototype déclenche quand readyState == 3) se déclenche plusieurs fois au cours des prochains TWELVE SECONDS, puis mon processus onSuccess les données. Tout le monde sait ce qui se passe ici avant que je creuse dans le code?Pourquoi la requête Ajax de prototype est-elle si longue à traiter?

+0

Combien rapportez-vous dans votre réponse? –

+0

Environ un mégaoctet de texte XML, en fonction de la plage de requêtes. – Berry

+0

Un script awk rapide montre plus tard qu'une représentation JSON plus ou moins compacte sera d'environ 20 fois plus petite, donc le script côté serveur est ici. J'espérais l'éviter - mieux vaut avoir une chose à maintenir que deux - mais le gain de performance en vaudra la peine. – Berry

Répondre

0

Il s'est avéré que Firebug affichait la fin du POST quand readystate avait 4 ans, mais ne signalait pas la transaction complète jusqu'à ce que mon gestionnaire onSuccess ait fini, et le mégaoctet de XML qui prenait tout un tandis que. Le passage à la représentation JSON plus compacte au lieu de XML réduit le XML fastidieux à l'analyse syntaxique, plus ou moins:

eval(responseText); doGraph(); 

Merci pour les commentaires, les gars, ils ne sont pas exactement ce que je avais besoin, mais ils me pointe dans la droite direction, et la fonctionnalité fonctionne maintenant très lisse.

1

Avec readyState 3, la demande XHR est toujours en cours, ce qui peut déclencher votre gestionnaire onInteractive plusieurs fois. Qu'est ce que ça fait? Pourquoi ne pouvez-vous pas utiliser un callback et le faire virer sur readyState === 4? En outre, vous pouvez essayer d'utiliser le panneau net de Firebug (onglet 'Net' en haut) pour voir ce qui prend tout ce temps.

+0

Tout le gestionnaire "onInteractive" est log qu'il a tiré; c'est strictement pour le débogage. J'essayais de comprendre pourquoi cela prenait si longtemps après que Firebug ait prétendu que le XHR était fini. L'onglet Net est une bonne idée, merci. – Berry

Questions connexes