2010-10-15 2 views
0

J'utilise ce bit de code pour reformater un grand ajax responseText en de bonnes données binaires. Cela fonctionne, même si c'est lent.Est-ce que la boucle peut se dérouler ou aider à cette situation?

Les données que je travaille peuvent être aussi grandes que 8-10 megs.

J'ai besoin que ce code soit absolument efficace. Comment est-ce que le déroulement de boucle ou l'appareil de Duff serait appliqué à ce code tout en gardant mes données binaires intactes, ou est-ce que quelqu'un voit quelque chose qui peut être changé qui aiderait à augmenter sa vitesse?

var ff = []; 
var mx = text.length; 
var scc= String.fromCharCode; 
for (var z = 0; z < mx; z++) { 
    ff[z] = scc(text.charCodeAt(z) & 255); 
} 
var b = ff.join(""); 
this.fp=b; 
return b; 

Merci Pat

+0

Vous êtes surpris que le traitement de 8 à 10 Mo, octet par octet, soit lent en JavaScript? Combien lent parlons-nous ici? Et voir aussi: [Pourquoi array.push est-il parfois plus rapide que array \ [n \] = valeur?] (Http://stackoverflow.com/questions/614126/why-is-array-push-sometimes-faster-than- arrayn-value) – Shog9

Répondre

1

Votre temps n'est pas la boucle. C'est ceci: ff[z] = scc(text.charCodeAt(z) & 255); Êtes-vous de plus en plus en croissance ff? Ce sera un cochon, garanti.

Si vous venez de le lancer sous le débogueur et le mettre en pause, je parie que vous le verrez en cours de croissance ff. Pré-allouer.

+0

Ne pas dire que cela ne pouvait pas faire de différence, mais je doute que ce soit une grande différence ... ou une amélioration. * Si vous avez des tests qui indiquent le contraire, vous devriez les poster. – Shog9

+0

@ Shog9: Peut-être que «pousser» est le meilleur moyen d'ajouter des éléments. En tout cas, je soupçonne que la boucle 'for' n'est pas où le temps passe. –

+0

@Mike: Je suis d'accord avec vous WRT le bit de boucle n'est pas un facteur important. Les performances des tableaux varient considérablement d'un navigateur à l'autre (même entre les versions de navigateur), tout comme les performances relatives de la concaténation de chaînes par rapport à array.join(). Je voudrais voir plus d'informations de l'OP quant à l'endroit où il exécute ceci et à la lenteur de son exécution - je soupçonne plutôt qu'il pourrait améliorer les choses * de façon spectaculaire en passant à une expression rationnelle (code natif). – Shog9

0

Convertir les données à un tableau JSON sur le serveur. 8/10 mégaoctets prendront beaucoup de temps même avec un moteur JSON natif. Je ne suis pas sûr pourquoi une application JS a besoin de 8/10 méga-octets de données. Si vous téléchargez sur l'appareil du client, convertissez-le dans le format attendu et connectez-vous-y. Ils peuvent le télécharger et le traiter eux-mêmes ensuite.

Questions connexes