2009-06-16 9 views
0

Existe-t-il un moyen d'optimiser une boucle jQuery en traitant une quantité de données relativement importante? Le navigateur a tendance à se verrouiller pendant que les données sont bouclées, et tout ce qui est en dessous de IE8 donne un message «script running too slow».Optimisation de la boucle jQuery

Je suis juste en utilisant un jQuery.each (données, fonction (i, val) pour obtenir le nom du champ et de la valeur pour le champ de la base de données et automatiquement le champ avec cette valeur.

Le les données sont prises à partir d'un fichier JSON qui est généré lors de la connexion.

Toutes les suggestions seraient appréciés.

+2

Lorsque vous demandez des conseils d'optimisation de code, il est généralement pratique d'inclure le code. Le problème est plus susceptible d'être le code dans la boucle que le mécanisme de bouclage. –

+0

J'ai trouvé que setTimeout ("", 5); semble faciliter la charge sur le navigateur. – Choog

Répondre

0

J'ai rencontré ce même problème en bouclant les résultats, et je n'utilise pas la fonction each(). Le comportement de blocage, qui se produit dans une fonction de rappel ajax, verrouille la page, y compris les indicateurs de «chargement».

Une solution que je n'ai pas encore implémentée est de faire en sorte que l'ajax tire les résultats en «morceaux» de manière récursive, et affiche x nombre de résultats à la fois (20? 50?). De cette façon, l'utilisateur obtient un retour immédiat et la perception du verrouillage ne se produit pas.

Peut-être quelque chose comme ça pourrait fonctionner pour vous -

+0

il y a un plugin jquery appelé 'throttle' qui fait exactement cela. – Choog

+0

Cependant, je ne peux pas le faire fonctionner. – Choog

0

Poussez la itération de la boucle lente au serveur et créer un régal pour les yeux qui gardera l'utilisateur occupé en attendant la Si le résultat de la boucle ne bloque pas, envoyez une fonction de rappel au serveur et laissez l'utilisateur continuer son flux de travail.

1

Il y a quelques jours à peine, un article de Google Tech Talk sur le langage JavaScript à haute performance mentionnait que .each() avait un coût énorme et pourquoi.

http://www.youtube.com/watch?v=mHtdZgou0qU

Ces choses peuvent être assez impliqué pour corriger.

À quelle fréquence faites-vous cette opération? Pouvez-vous le décomposer en petits morceaux avec setTimeout et donner à votre utilisateur une barre de progression pendant que vous le faites?