2010-07-30 7 views
0

Comment puis-je diagnostiquer les problèmes de performances de la page Web si aucun de mes événements JavaScript ne semble en être la cause? J'ai une application Web utilisant jqGrid. Un clic sur la grille entraîne un gel de 2-3 secondes avant que quoi que ce soit ne se produise (y compris les clics survenant). Cliquer n'importe où ailleurs sur la page est correct (réponse instantanée). La suppression des lignes réduit le délai (50 lignes est très lent, mais 5 lignes donnent une réponse instantanée). La reliure de tous les événements sur la page à la $('*').add(document).unbind() ne résout pas le problème, ce qui me porte à croire qu'il y a des événements qui me manquent.Lenteur de JavaScript en dehors des événements

Je ne vois pas ce comportement lent si j'enregistrer la source de la page sur mon bureau et ouvrir ce fichier HTML dans mon navigateur. Cela semble indiquer qu'il s'agit en fait d'un problème JavaScript.

Je suis en train de tester Firefox 3.6.8 et la dernière version de Firebug. Le problème affecte également les autres navigateurs, mais moins dans les plus rapides (Safari et Chrome).

Mise à jour: IE7 ne semble pas souffrir de ce retard, de manière surprenante. J'ai mis une alerte au tout début de l'événement jqGrid click, et la boîte d'événements est apparue immédiatement après avoir cliqué sur la grille. Firefox a encore un décalage de plusieurs secondes, et Chrome et Safari ont un décalage très court (pas aussi court que IE, mais toujours très court).

Mise à jour # 2: Je suis assez confiant que cela peut être un bug dans Firefox. Même si je ne suis pas en train de décrocher/mourir tous les événements, je suppose que Firefox ne nettoie pas correctement tout. J'ai supprimé tous les autres événements et ajouté un événement de clic unique à la table de la grille et a démarré le profileur. J'ai ensuite cliqué une fois sur la table et terminé le profiler. Je suis revenu une "Aucune activité à profiler". message.

Répondre

2

Le meilleur outil que je peux recommander pour cela est dynaTrace AJAX Edition, c'est un profileur pour IE (généralement le plus lent dans les performances JS, donc en fait un bon environnement de test pour démarrer l'optimisation).

Il va vous donner une ventilation complète, vous montrer des appels de méthode répétés, l'arbre d'appels et où vont vos cycles CPU. Check out their tutorials on usage/features pour commencer.

Oh ouais, c'est gratuit :)

+0

Merci, je vais vérifier. Espérons qu'il sera plus utile que le profileur de Firebug, qui a signalé "Aucune activité à profiler". – MikeWyatt

0

Utilisez-vous en direct() avec tous les événements de clic? Parfois, live() peut vraiment ralentir les performances de la page s'il y a trop d'instances sur une page particulière. En particulier Ajax a relassé le contenu qui contient le lien que le vivant doit se relier.

Voir ici pour plus d'informations:

Does jquery live slow down websites?

+0

Je ne trouve aucune référence à live() dans le code jqGrid, et je ne l'ai jamais utilisé. Pour être sûr, je ne liez pas tous les événements en direct ('$ ('*'). Add (document) .die()'). Cela ne semble pas avoir d'effet sur le décalage. – MikeWyatt

Questions connexes