2009-11-30 1 views
1

Ce matin, j'ai essayé d'utiliser les fonctions de décodage JSON d'ExtJS contre 0,75 Mo de données, et il s'est écrasé sur FF3. Je me demande quel est le JSON le plus susceptible d'être décodé du côté client? Cela pourrait utiliser ExtJS, jQuery, d'autres cadres Javascript ou tout décodage intégré que Javascript peut lui-même offrir.Quel est le JSON que vous pouvez raisonnablement espérer décoder du côté client

+0

Je voudrais garder l'accent sur l'expérience avec différentes implémentations Javascript/Cadres de décodage JSON si possible, avec « dur et rapide » données, en particulier si quelqu'un a fait un benchmarking. Je suis bien au courant des approches alternatives. –

Répondre

0

Comme il s'est avéré que Firebug était le coupable. Lorsqu'il est désactivé, Ext.util.JSON.decode et la fonction eval() native de Javascript retournent en 0.15 secondes.

Avec Firebug sur si eval revient en 0.3 alors que j'ai finalement obtenu Ext.util.JSON.decode pour finir avec Firebug sur et il a fallu 60 + secondes !! J'ai vraiment besoin de Firebug pendant le développement.

1

J'ai eu ce problème avec l'analyseur JSON de YUI, j'ai donc essayé l'analyseur JSON de Prototype pour les grands ensembles de données et j'ai trouvé que cela fonctionnait beaucoup mieux. J'ai également constaté qu'une fois que les ensembles de données atteignaient une certaine taille, ils prenaient trop de temps à analyser et le navigateur émettait un message demandant si vous vouliez terminer le travail. Donc, pour les grands ensembles de données, il pourrait être utile de les diviser en plus petits morceaux plus faciles à digérer.

+0

Merci, je serai intéressé si quelqu'un a des données solides et rapides. Comme vous le dites, séparer les données est une solution. L'évaluation est aussi, au moins à court terme; eval termine en 0.3 secondes sur mes 0.75 MB de données. –

+0

@George: l'envoi de plus petites portions de données sera plus rapide en raison du temps de transmission du fil. – voyager

1

Cela dépend en grande partie du navigateur client, car Chrome n'aurait pas de problème avec quelque chose d'aussi grand, alors que IE6 s'arrêterait probablement sur place. Je recommande que plutôt qu'une grande transmission JSON de 750 Ko que vous deviez décoder à la fois, essayez d'envoyer des messages plus petits (100 Ko) en arrière-plan et en demandant/montrant la partie des données que le les besoins du client en premier. De cette façon, votre page se sentira plus vite. Essayez toujours de charger à la demande de grands ensembles de données. Mon sentiment général est que le problème n'était pas la taille du message JSON, mais plutôt l'implémentation JSON d'ExtJS dans FF.

L'avez-vous essayé dans d'autres navigateurs? Si cela se produit uniquement sur FF, je vous recommande d'essayer et d'utiliser Firefox's own JSON interface pour faire le décodage et voir si cela fonctionne.

Avez-vous également vérifié que la réponse JSON est correcte? Il peut s'agir de l'analyseur JSON.

+0

merci, la réponse JSON est correcte comme peut être déduite du commentaire en réponse à Zoidberg, car je suis capable d'évaluer la réponse JSON. –

+0

Je ne pense pas que vous connaissiez l'implémentation d'Ext. S'il vous plaît voir ma réponse pour plus de détails. –

+0

@bmoeskau: Je le pensais, car la plupart des frameworks javascript ont tendance à utiliser l'implémentation native si possible. Néanmoins, vous ne devez pas supprimer un problème avec le wrapper Ext sur FF. Si vous pouvez utiliser directement l'implémentation native de FF sans problèmes, alors vous pouvez être certain que le bug est bien réel. – voyager

0

Ceci est intéressant car Ext utilise simplement l'analyse JSON native du navigateur si elle est supportée par le navigateur, sinon il s'agit du JSON. Il n'y a aucune analyse manuelle d'aucune sorte, donc je ne sais pas comment cela serait affecté par Firebug. Une chose que vous pouvez essayer, vérifier la valeur de Ext.USE_NATIVE_JSON juste avant votre logique d'analyse (devrait être true si vous utilisez FF 3.1+, sinon sera false). Essayez de mettre cela à la valeur opposée et voyez si cela change quelque chose (encore une fois, je ne sais pas pourquoi, mais cela vaut la peine d'essayer de voir s'il y a une différence dans votre cas).

BTW, c'est un très grand nombre de JSON ...;)

Questions connexes