Outils de développement Chrome JavaScript et performances

Dans cette troisième partie de notre série d’outils pour les développeurs Chrome, nous verrons comment modifier et déboguer JavaScript. L'optimisation est une partie importante du processus de développement, en particulier pour les applications critiques en termes de performances. Nous discuterons également des techniques d'identification des goulots d'étranglement potentiels dans notre code..

Comme dans les deux articles précédents, je vais me concentrer sur les fonctionnalités de la version de Chrome Canary (version 26.0, à la date de rédaction de ce document). Je couvrirai les panneaux Sources et Timeline.


Panneau de sources

Le Panneau de sources est l'endroit idéal pour le débogage de JavaScript. Ce panneau, associé au panneau de la console, constitue un outil extrêmement puissant! C'est une interface de type pointer-cliquer qui vous permet de suspendre l'exécution de JavaScript et d'inspecter toutes les variables et tous les objets de la portée actuelle..

  1. Le panneau des sources. Si vous ne voyez pas autant de scripts que prévu, actualisez la page avec le panneau Sources ouvert..
  2. Ce volet peut être soit caché, auto-masqué ou fixé. Cliquez sur la petite icône à la droite de 'Scripts de contenu' pour basculer entre ces états. Ce volet peut être redimensionné.
  3. L'onglet Sources dans le volet de gauche; vous aurez probablement cet onglet ouvert la plupart du temps. Les ressources qu'il répertorie sont séparées par sous-domaine et vous pouvez vous attendre à voir CSS, JavaScript et HTML dans l'onglet.
  4. Vous trouverez peut-être utile de modifier votre code CSS et JavaScript dans les outils de développement..

  5. L'onglet Scripts de contenu (non actif dans la capture d'écran) peut tout d'abord afficher de nombreux scripts portant des noms bizarres. Ce sont en fait des extensions Chrome chargées sur la page. Ceci est utile pour déboguer des extensions réelles. Sinon, vous pouvez éviter de les voir en ouvrant votre page dans une fenêtre de navigation privée. la plupart des extensions sont désactivées par défaut en mode navigation privée.
  6. Le volet de contenu principal affiche le contenu du script sélectionné. La sélection de plusieurs scripts crée une interface à onglets semblable à un IDE.
  7. Ce volet contient des sous-panneaux qui fournissent des utilitaires de débogage JavaScript utiles. En haut de la fenêtre se trouvent les icônes pour parcourir votre code..
  8. Watch Expressions fait exactement cela, il "surveille" les expressions que vous avez saisies. Si vous souhaitez connaître la valeur du paramètre ce mot-clé aux différentes étapes d’un programme JavaScript, vous pouvez regarder la ce mot-clé pour voir ses différentes valeurs dans le temps. Cliquez sur le bouton Ajouter pour ajouter une expression. Si une expression ne se met pas à jour, cliquez sur le petit bouton d'actualisation situé à côté du bouton Ajouter..
  9. Les points d'arrêt XHR nous permettent d'interrompre l'exécution du code JavaScript lors d'une requête Ajax. Nous obtenons encore plus de contrôle sur ce comportement en fournissant une valeur dans le champ "Interrompre lorsque l'URL contient" qui apparaît lorsque vous cliquez sur le bouton Ajouter. Si aucune valeur n'est fournie, le débogueur s'interrompt toute XHR demande.
  10. Les points d'arrêt de l'écouteur d'événements vous permettent de définir des points d'arrêt pour des événements spécifiques. La capture d'écran ne répertorie que les catégories de niveau supérieur. Par exemple, "Minuterie" présente les points d'arrêt suivants du programme d'écoute d'événement: "Définir minuterie", "Effacer minuterie" et "Minuterie activée"..
  11. Si vous rencontrez du code restreint, sélectionnez "Pretty Print" comme un embellisseur JavaScript..

Onglet Sources

L'onglet sources répertorie les ressources regroupées par sous-domaine à partir duquel elles sont servies. Chaque ressource a un menu contextuel (révélé par un clic droit sur la ressource) avec un ensemble d’options communes. Une option est cependant très intéressante: Modifications locales, que nous examinerons plus tard.

Remarque: vous pouvez afficher la liste des fichiers source sous forme de liste simple (c'est-à-dire qu'elle ne figure pas dans les dossiers regroupés par sous-domaine) en décochant l'option 'Afficher les dossiers' dans Paramètres> Général.

Un clic sur une ressource l'affiche dans le volet de contenu principal. N'oubliez pas d'activer le joli mode d'impression pour les ressources réduites, car certains minificateurs renomment des variables pour rendre le code plus difficile à comprendre. Espérons que davantage de développeurs généreront des cartes source à l'avenir, ce qui facilitera l'utilisation de code réduit..

Vous pouvez modifier la plupart des fichiers dans le volet de contenu principal. Ces modifications sont immédiatement reflétées dans le navigateur. Une fois les modifications apportées à une ressource, le menu contextuel vous offre la possibilité d’enregistrer (mais pas de manière permanente) ou d’enregistrer en tant que (sauvegarde locale d’une nouvelle version). Lorsque vous travaillez avec vos propres sites locaux, vous trouverez peut-être utile de modifier votre code CSS et votre code JavaScript dans les outils de développement plutôt que dans votre environnement de développement. L'enregistrement des modifications, dans ce cas, modifie le fichier source réel. Des outils tels que Tincr ou chrome-devtools-autosave peuvent vous aider à automatiser ce flux de travail..

Le menu contextuel de la ressource offre également la possibilité de révéler la ressource dans le panneau de réseau..

Révisions

Une révision est un nouveau point dans la vie d'une ressource, sur lequel elle a été modifiée. La modification et l'enregistrement du code à partir du panneau des sources créent une nouvelle révision et les modifications de style apportées dans le panneau des éléments déclenchent une nouvelle révision.!

Une fois que vous avez apporté quelques modifications, vous pouvez cliquer avec le bouton droit de la souris sur la ressource et sélectionner Modifications locales. Cela ouvre un nouveau volet Modifications locales qui contient un diff des fichiers d'origine et modifiés. Dans le volet Modifications locales, nous pouvons annuler intégralement un fichier source modifié (utile lorsque vous avez effectué un grand nombre de modifications non souhaitées) en cliquant sur "Revenir" en regard du nom du fichier.

Volet Contenu principal

Developer Tools est assez aimable pour nous alerter des optimisations potentielles.

Le volet de contenu principal contient de nombreuses fonctionnalités que vous retrouveriez dans les éditeurs de code de base: numéros de ligne, mise en surbrillance de la syntaxe, possibilité de créer des onglets et fonctionnalité "annuler". Bien qu'il ne corresponde pas à un IDE à part entière, ce n'est pas mauvais pour un montage rapide.

Points d'arrêt

Les points d'arrêt nous permettent d'interrompre l'exécution du code JavaScript et d'inspecter l'environnement actuel. Par exemple: supposons que nous ayons un simple pour boucle qui pousse les éléments sur un tableau. Notre objectif est de comprendre précisément le fonctionnement interne de chaque itération de la boucle. Nous pourrions très facilement utiliser console.log enregistrer les variables que nous voulons inspecter. Bien que cette technique puisse vous donner les résultats souhaités, ce n’est certainement pas la technique de débogage la plus efficace. En utilisant des points d'arrêt, nous pouvons suspendre l'exécution du code à l'intérieur du pour boucle et inspecte toutes les variables dans la portée du contexte.

var arr = []; pour (var i = 0; i < 3; i++)  var num = i; arr.push(num); 

Pour ajouter un point d'arrêt, cliquez sur le numéro de ligne. vous pouvez également cliquer avec le bouton droit sur le numéro de ligne et choisir l'option "Ajouter un point d'arrêt". Après avoir défini votre point d'arrêt, actualisez la page et notez que des points d'arrêt persistent entre les chargements de page. Si le code n'a pas encore été exécuté (par exemple, le point d'arrêt a été défini dans un gestionnaire d'événements click), vous pouvez alors lancer l'exécution du code sans actualisation de la page..

Vous pouvez coder en dur un point d'arrêt dans votre code en utilisant le débogueur; déclaration dans votre code. Les outils de développement (et la plupart des débogueurs JavaScript) reconnaissent cela comme un point d'arrêt.

Lorsque vous atteignez un point d'arrêt, la page est grisée et la ligne de code est bleue. À ce stade, nous pouvons appuyer sur la touche Échap pour afficher le panneau de la console. Ce qui est intéressant, c'est que le code écrit et exécuté dans la console (en pause sur un point d'arrêt) s'exécute réellement dans le contexte actuellement en pause! Typiquement, le ce mot clé se réfère au global la fenêtre objet; alors que regarder ce dans un Cliquez sur gestionnaire d'événement affiche la valeur en tant que cible d'événement (un élément).

Dans la capture d'écran ci-dessus, la partie grise représente le document lui-même et les outils de développement ont mis en surbrillance la ligne actuelle de JavaScript. Dans la console, vous voyez les résultats de l'inspection de quelques variables. Et à droite du volet contenu se trouve le volet "Variables d'étendue", où vous pouvez inspecter toutes les variables et tous les objets de l'étendue actuelle..

Points d'arrêt conditionnels

Les points d'arrêt conditionnels vous permettent de faire une pause lorsqu'une certaine condition est vraie.

Dans le volet de droite du panneau Sources, vous remarquerez l'onglet Points d'arrêt XHR. Cliquez sur "Ajouter un point d'arrêt XHR" sur votre site favori compatible Ajax. Laisser le champ "URL contient" vide les pauses toute XHR demande.

Cela présente aux développeurs de nouvelles et puissantes opportunités. Nous pouvons naviguer vers un site que nous n’avons pas encore construit, ni impliquer, et simplement commencer à déboguer du code en fonction de certains événements et critères. Donc, faire une pause sur les demandes Ajax est bien, mais quels autres événements pouvons-nous interrompre?

Points d'arrêt de l'écouteur d'événements

Le panneau des sources comporte une interface pointer-cliquer permettant de définir des points d'arrêt correspondant à certains écouteurs d'événement. Notez que l'interruption d'un événement particulier ne fonctionne que lorsque la page en question est à l'écoute de cet événement. Si on se casse le Contrôle> Redimensionner event, le code suivant garantit que le code est rompu lorsque l'événement est déclenché:

window.onresize = function (e) console.log (e); ;

Alors, quand est utile de casser des événements particuliers?

Les points d'arrêt persistent entre les chargements de page.

  • Lorsque vous jouez à ce nouveau jeu HTML5, vous voulez savoir ce qui se passe dans sa boucle de jeu principale. Essayez de régler le Demander une image d'animation et Minuteur les auditeurs d'événements et de voir ce qui se passe dans chaque événement.
  • Ce nouveau plugin JavaScript réactif qui affiche joliment la page après un redimensionnement de la fenêtre semble plutôt cool. Mais en tant que développeurs, nous voulons savoir ce que le code fait lorsque nous redimensionnons la fenêtre. Essayez de définir le point d'arrêt Contrôle> Redimensionner l'écouteur d'événements, et vous pouvez le faire.. Remarque: Vous devrez probablement parcourir beaucoup de code de bibliothèque. Essayez-le sur la version jQuery du plug-in Masonry et notez comment le fait de parcourir le code après un point d'arrêt de redimensionnement finit par vous faire traverser de nombreux éléments internes de jQuery..
  • De nombreux sites Web, y compris GMail, permettent à l'utilisateur de coller du contenu. Le Presse-papiers> Coller le point d'arrêt serait utile dans ce cas.
  • Les autres options de point d'arrêt utiles incluent: soumission de formulaire, copie de données, événements de mutation DOM, orientation de périphérique, pressions sur les touches, demandes Ajax, événements de souris (survol, déplacement, clic, etc.), setInterval, touchstarts, etc..

Points de coupure DOM

L'onglet Points d'arrêt DOM affiche les points d'arrêt du DOM. Un moyen simple de voir cela en action est de trouver un élément qui, par exemple, a un déclic lorsque vous cliquez dessus. nom du cours la propriété a changé. Recherchez l’élément dans le panneau Eléments, cliquez dessus avec le bouton droit de la souris et accédez à Break On> Attributes Modifications. Le code sera maintenant cassé lorsque les valeurs des attributs de cet élément changent.

document.querySelector ('# bouton'). onclick = function () this.setAttribute ('un peu', 'chose'); ;

le sur clic Le gestionnaire d'événement ci-dessus compte comme une modification d'attribut, qui présente quelque chose de similaire à ceci:

Les autres options incluent:

  • Modifications de sous-arbres se produit lorsqu'un des nœuds de l'arborescence est inséré ou supprimé.
  • Attributs Modifications se produire lors du changement d'attribut d'un élément.
  • Élimination des noeuds se déclenche lors de la suppression d'un élément; par exemple: element.remove ().

Remarque: Chrome semble avoir implémenté la méthode remove (). Certains navigateurs ne supportent pas cette méthode. Donc, removeChild () devra être utilisé à la place.


Panneau de la timeline

Le panneau Montage vous permet d'analyser les problèmes de performances de votre application Web. Le principal objectif du panneau Montage est (au moment de la rédaction) d'afficher des informations, par opposition aux autres panneaux vous permettant d'effectuer des actions destructrices sur la page..

Les moments où vous souhaiterez peut-être utiliser le panneau Montage comprennent:

  • Enquêter sur les performances de défilement de votre page.
  • Essayer d'améliorer le FPS de votre animation.
  • Création de pages Web mobiles susceptibles d'être visualisées sur divers appareils anciens et nouveaux.
  • Rendre le Web sans jank!
  1. Ces trois éléments (événements, cadres et mémoire) présentent différents points de vue, chacun illustrant diverses informations relatives aux performances..
  2. Dans ce cadres vue, chaque barre représente un cadre rendu par le navigateur. Plus la barre verticale est "pleine", meilleure est la performance. Les parties colorées de la barre sont expliquées dans la légende au bas du panneau Montage..
  3. Vous pouvez coder en dur un point d'arrêt dans votre code en utilisant le débogueur; déclaration dans votre code.

  4. UNE popover pour les enregistrements individuels, détaillant combien de temps un record a pris pour exécuter. Dans certains cas, le popover sera lié à la ligne de code qui a provoqué l'exécution de l'enregistrement (c'est plus susceptible de se produire avec des enregistrements basés sur un script).
  5. La liste de enregistrements. Certains enregistrements sont déclenchés par notre code; d'autres enregistrements peuvent être causés par les actions de l'utilisateur. Par exemple, le défilement de la page provoque un événement 'Paint'.
  6. Chaque enregistrement a une ligne correspondante qui illustre le temps qu'il a fallu pour terminer. Comme indiqué dans la capture d'écran, vous pouvez ouvrir certaines barres en cliquant sur la flèche déroulante..
  7. Options de filtrage qui dictent les enregistrements à afficher. Tous les enregistrements sont affichés par défaut. Si vous étudiez un type particulier de problème de performance, vous pouvez nettoyer les enregistrements enregistrés à l'aide des options de filtrage..
  8. Par défaut, tous les enregistrements sont affichés quel que soit le temps nécessaire à leur achèvement. Si vous souhaitez exploiter ces enregistrements inhabituellement longs, passez de "Tous" à l'une des options prédéfinies (telles que 15 ms)..
  9. L’enregistrement commence (comme dans le panneau Réseau). Méfiez-vous de le laisser enregistrer pendant une longue période; vous serez bombardé de données! Lorsque je regarde les problèmes de défilement, je clique sur enregistrer, fais défiler la page pendant 2 secondes, puis arrête l'enregistrement.

Enregistrement

Dans la partie 2, vous pouvez rappeler comment nous avons commencé à enregistrer les informations réseau avant le chargement de la page afin de capturer autant de requêtes réseau que possible. Nous ne faisons pas cela dans le panneau Timeline; il vaut mieux enregistrer des événements courts et spécifiques. Nous n'avons pas nécessairement à * faire * quoi que ce soit. Nous pourrions laisser l'enregistrement enregistrer pour voir ce qui se passe lorsque l'utilisateur est inactif ou si des minuteries sont en cours d'exécution en arrière-plan.

Les onglets Evénements, Cadres et Mémoire sont renseignés lors de l'enregistrement. alors, veillez à les parcourir pour trouver les données dont vous avez besoin. La section Mémoire peut vous aider à détecter les fuites de mémoire potentielles..

Enregistrements dans l'onglet Cadres

Les enregistrements sont affichés pendant et après les enregistrements. Une quantité non négligeable de données est capturée dans les enregistrements, comme indiqué dans l'image suivante..

Cette capture d'écran montre des requêtes réseau (bleu) et quelques "styles de recalcul" (violet). Les recalculs de style peuvent avoir lieu pour un certain nombre de raisons. Les enregistrements jaunes sont des scripts et le vert représente le rendu de la page..

Cliquer ou survoler un enregistrement affiche plus d'informations. Par exemple, survoler un enregistrement 'paint' peut vous montrer la partie de la page qui a été peinte.

Les outils de développement relient parfois un enregistrement à un autre panneau. Par exemple, le lien d’une image vous dirige vers le panneau Ressources ayant cette image en surbrillance et un enregistrement XHR peut être lié à l’entrée correspondante dans le panneau Réseau..

Developer Tools est assez aimable pour nous avertir des optimisations potentielles. Remarquez la petite icône de notification située à droite de certains des enregistrements dans l'image suivante. Si elle est estompée, vous devrez explorer en profondeur pour localiser l’enregistrement contenant les informations utiles..

Les popovers contiennent parfois un lien vers la ligne de code qui a provoqué l'affichage de l'enregistrement. Mais un avertissement: de jolies impressions ne serviront pas toujours, surtout quand on regarde un code tiers. Une option consiste à définir un point d'arrêt sur la ligne sur laquelle vous vous dirigez. Une fois le débogueur en pause, vous pouvez afficher le contenu de la variable pour mieux comprendre l'intention du code..

Filtration

Si vous êtes comme moi, vous finissez toujours par capturer plus de données que nécessaire, mais vous pouvez créer une sélection sur les barres verticales (cadres) qui affiche uniquement les enregistrements correspondant à la partie sélectionnée..

Si vous ne vous souciez que des enregistrements longs, définissez un filtre pour afficher uniquement ces enregistrements longs. Vous pouvez le faire en bas du panneau de la timeline.

Si le défilement n'est pas aussi fluide qu'il devrait l'être, envisagez d'exclure le "Chargement" (par exemple, les enregistrements réseau). Cela étant dit, si vous savez que les requêtes réseau sont utilisées pour charger des données dans une page où les utilisateurs défilent à l'infini, gardez l'option 'Chargement' cochée..

N'appliquez pas de filtrage simplement parce que les données semblent trop intenses au début. Prenez le temps de comprendre et d'analyser ce que les outils de développement vous montrent. Vous voudrez utiliser la chronologie pour confirmer l'endroit où les ralentissements se produisent et viser à rendre ces barres verticales aussi vides que possible (espace blanc / temps mort).


Lectures complémentaires

Le volet de contenu principal présente de nombreuses fonctionnalités que vous retrouveriez dans les éditeurs de code de base..

  • La documentation officielle de Chrome Developer Tools comprend la documentation de chaque panneau. Notez qu'une grande partie de la documentation a été écrite vers avril 2012 et que certaines captures d'écran sont obsolètes..
  • Outils de développement Chrome: recherchez ou naviguez vers des fichiers, des méthodes ou des numéros de ligne. Les raccourcis pour la recherche de texte et au-delà est un message court, mais utile, de @addyosmani.
  • Modern Web Development est un article long et intéressant écrit par @jtaby qui couvre de nombreux panneaux des outils de développement..
  • Mon flux de travail: Ne jamais quitter DevTools (par Remy Sharp) illustre la fonctionnalité d'enregistrement de fichier dans le panneau des sources.
  • Google I / O 2012 - Outils de développement Chrome Evolution est une vidéo d'une heure présentant les outils de développement. C'est très pratique et informatif (par Sam Dutton et Pavel Feldman).
  • Attendez, Chrome Dev Tools pourrait faire ça? Quelques bons conseils sur la mémoire et les performances, par @igrigorik
  • Le point d'arrêt est une nouvelle série de vidéos intéressantes par les membres de l'équipe de Chrome. Quelques épisodes sont déjà sur YouTube! Épisode n ° 1, épisode n ° 2, épisode n ° 3 et épisode n ° 4. Il est présenté par divers membres, dont Paul Irish, Paul Lewis, Addy Osmani et Sindre Sorhus..
  • Record, Examine, Fix est un aperçu détaillé du panneau Chronologie, par Addy Osmani

Connaissez-vous d'autres ressources utiles? Mentionnez-le dans les commentaires!