Un guide complet sur l'API Performance Observer pour surveiller la performance d'exécution, identifier les goulots d'étranglement et optimiser les applications web. Apprenez à collecter et analyser des métriques pour une meilleure expérience utilisateur.
API Performance Observer : Métriques de Performance d'Exécution et Analyse des Goulots d'Étranglement
Dans le paysage numérique concurrentiel d'aujourd'hui, la performance des sites et applications web est essentielle à l'engagement des utilisateurs et au succès commercial. Des temps de chargement lents et des interfaces non réactives peuvent frustrer les utilisateurs, entraîner l'abandon de transactions et, en fin de compte, une perte de revenus. L'API Performance Observer est un outil puissant qui permet aux développeurs de surveiller et d'analyser les métriques de performance d'exécution, d'identifier les goulots d'étranglement et d'optimiser leurs applications pour une expérience utilisateur plus fluide, plus rapide et plus agréable, quel que soit l'emplacement ou l'appareil de l'utilisateur.
Qu'est-ce que l'API Performance Observer ?
L'API Performance Observer est une API JavaScript qui fournit un mécanisme pour observer et réagir aux événements liés à la performance au fur et à mesure qu'ils se produisent dans une application web. Contrairement aux techniques traditionnelles de surveillance de la performance qui reposent sur un échantillonnage périodique ou une instrumentation manuelle, l'API Performance Observer offre un moyen plus efficace et flexible de capturer des données de performance en temps réel. Elle permet aux développeurs de s'abonner à des types d'entrées de performance spécifiques et de recevoir des notifications chaque fois que de nouvelles entrées sont enregistrées.
Cette approche "observer et réagir" permet une surveillance proactive de la performance, autorisant les développeurs à identifier et à résoudre les problèmes de performance avant qu'ils n'affectent l'expérience utilisateur. L'API est standardisée sur les navigateurs modernes, garantissant un comportement cohérent et une compatibilité multiplateforme.
Concepts et Fonctionnalités Clés
Pour utiliser efficacement l'API Performance Observer, il est essentiel de comprendre ses concepts et fonctionnalités de base :
- PerformanceEntry : Représente une seule mesure ou un seul événement de performance. Les entrées de performance contiennent des informations sur le type d'événement, ses heures de début et de fin, et d'autres attributs pertinents. Les exemples incluent
resource
,mark
,measure
,navigation
,longtask
etevent
. - PerformanceObserver : Un objet qui vous permet de vous abonner à des types d'entrées de performance spécifiques et de recevoir des notifications chaque fois que de nouvelles entrées sont ajoutées à la chronologie de performance du navigateur.
- Méthode observe() : Utilisée pour configurer le PerformanceObserver afin d'écouter des types d'entrées de performance spécifiques. Vous pouvez spécifier les types d'entrées que vous souhaitez observer, ainsi qu'une option
buffered
pour recevoir les entrées historiques. - Méthode disconnect() : Utilisée pour arrêter l'écoute des événements de performance par le PerformanceObserver.
- Méthode takeRecords() : Renvoie un tableau de toutes les entrées de performance qui ont été observées mais pas encore traitées par la fonction de rappel de l'observateur.
- Fonction de Rappel (Callback) : Une fonction qui est exécutée chaque fois que de nouvelles entrées de performance sont observées. Cette fonction reçoit un objet
PerformanceObserverEntryList
contenant les entrées observées.
Types d'Entrées de Performance Pris en Charge
L'API Performance Observer prend en charge une variété de types d'entrées de performance, chacun fournissant des informations spécifiques sur différents aspects de la performance des applications web. Certains des types d'entrées les plus couramment utilisés incluent :
resource
: Fournit des informations sur le chargement des ressources individuelles, telles que les images, les scripts, les feuilles de style et les polices. Ce type d'entrée inclut des détails comme l'URL de la ressource, les heures de début et de fin, la durée de récupération et la taille de transfert.mark
: Vous permet de créer des horodatages personnalisés dans votre code pour mesurer la durée de sections de code spécifiques. Vous pouvez utiliser des marqueurs pour suivre le début et la fin d'opérations critiques, comme le traitement de données ou le rendu de l'interface utilisateur.measure
: Utilisé pour calculer la durée entre deux marqueurs. Ce type d'entrée offre un moyen pratique de mesurer la performance de sections de code personnalisées.navigation
: Fournit des informations sur le timing de navigation d'une page, y compris le temps de recherche DNS, le temps de connexion TCP, les temps de requête et de réponse, et le temps de traitement du DOM.longtask
: Identifie les tâches qui bloquent le thread principal pendant une période prolongée (généralement plus de 50 millisecondes). Les tâches longues peuvent provoquer une non-réactivité de l'interface utilisateur et des saccades (jank).event
: Enregistre les informations de synchronisation pour des événements de navigateur spécifiques, tels queclick
,keydown
etscroll
.layout-shift
: Suit les décalages de mise en page inattendus sur la page. Ces décalages peuvent être déroutants pour les utilisateurs et avoir un impact négatif sur l'expérience utilisateur.largest-contentful-paint
: Mesure le temps nécessaire pour que le plus grand élément de contenu devienne visible sur la page.first-input-delay
: Mesure le temps que met le navigateur à répondre à la première interaction de l'utilisateur (par exemple, un clic ou un tap).element
: Rapporte des informations de synchronisation pour le rendu d'éléments spécifiques sur la page.
Exemples Pratiques et Cas d'Utilisation
L'API Performance Observer peut être utilisée dans un large éventail de scénarios pour améliorer la performance des applications web. Voici quelques exemples pratiques :
1. Surveillance des Temps de Chargement des Ressources
Le type d'entrée resource
vous permet de suivre les temps de chargement des ressources individuelles, telles que les images, les scripts et les feuilles de style. Ces informations peuvent être utilisées pour identifier les ressources à chargement lent qui impactent le temps de chargement de la page. Par exemple, vous pouvez utiliser le code suivant pour surveiller les temps de chargement des ressources :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`Resource: ${entry.name}, Duration: ${entry.duration}ms`);
});
});
observer.observe({ entryTypes: ["resource"] });
Ce code crée un PerformanceObserver qui écoute les entrées resource
et enregistre l'URL et la durée de la ressource dans la console. En analysant ces données, vous pouvez identifier les ressources à chargement lent et les optimiser en compressant les images, en utilisant un Réseau de Diffusion de Contenu (CDN) ou en optimisant la configuration de votre serveur.
Perspective Globale : Lors de la surveillance des temps de chargement des ressources, tenez compte de l'emplacement géographique de vos utilisateurs. Les utilisateurs dans des régions avec des connexions Internet plus lentes peuvent subir des temps de chargement considérablement plus longs. L'utilisation d'un CDN avec des serveurs répartis géographiquement peut aider à atténuer ce problème.
2. Mesure du Temps d'Exécution de Code Personnalisé
Les types d'entrée mark
et measure
vous permettent de mesurer le temps d'exécution de sections de code personnalisées. C'est utile pour identifier les goulots d'étranglement de performance dans la logique de votre application. Par exemple, vous pouvez utiliser le code suivant pour mesurer la durée d'une fonction spécifique :
performance.mark("start");
// Code to be measured
for (let i = 0; i < 1000000; i++) {
// Some computationally intensive operation
}
performance.mark("end");
performance.measure("My Function", "start", "end");
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`Measurement: ${entry.name}, Duration: ${entry.duration}ms`);
});
});
observer.observe({ entryTypes: ["measure"] });
Ce code crée deux marqueurs, start
et end
, avant et après la section de code que vous souhaitez mesurer. Il utilise ensuite la méthode performance.measure()
pour calculer la durée entre les deux marqueurs. Le PerformanceObserver écoute les entrées measure
et enregistre le nom de la mesure et sa durée dans la console. En analysant ces données, vous pouvez identifier les sections de code peu performantes et les optimiser en utilisant des techniques telles que la mise en cache, la mémoïsation ou l'optimisation algorithmique.
Information Actionnable : Identifiez les chemins critiques de votre application – les séquences de code les plus fréquemment exécutées et ayant le plus grand impact sur la performance. Concentrez vos efforts d'optimisation sur ces chemins critiques pour obtenir les gains de performance les plus significatifs.
3. Identification des Tâches Longues
Le type d'entrée longtask
identifie les tâches qui bloquent le thread principal pendant une période prolongée. Les tâches longues peuvent provoquer une non-réactivité de l'interface utilisateur et des saccades, entraînant une mauvaise expérience utilisateur. Vous pouvez utiliser le code suivant pour surveiller les tâches longues :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.warn(`Long Task: ${entry.name}, Duration: ${entry.duration}ms`);
console.warn(`Long Task Attribution: ${JSON.stringify(entry.attribution)}`);
});
});
observer.observe({ entryTypes: ["longtask"] });
Ce code crée un PerformanceObserver qui écoute les entrées longtask
et enregistre le nom de la tâche et sa durée dans la console. En analysant ces données, vous pouvez identifier les tâches de longue durée et les optimiser en les décomposant en plus petits morceaux, en utilisant des opérations asynchrones ou en les déchargeant sur un web worker.
Directive de Rédaction Globale : Lorsque vous expliquez des concepts techniques, utilisez un langage clair et concis, accessible aux lecteurs ayant différents niveaux d'expertise technique. Évitez le jargon et fournissez un contexte pour les termes peu familiers.
4. Analyse du Timing de Navigation
Le type d'entrée navigation
fournit des informations détaillées sur le timing de navigation d'une page, y compris le temps de recherche DNS, le temps de connexion TCP, les temps de requête et de réponse, et le temps de traitement du DOM. Ces données peuvent être utilisées pour identifier les goulots d'étranglement dans le processus de chargement de la page. Par exemple, vous pouvez utiliser le code suivant pour analyser le timing de navigation :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`Navigation: ${entry.name}`);
console.log(`DNS Lookup Time: ${entry.domainLookupEnd - entry.domainLookupStart}ms`);
console.log(`TCP Connection Time: ${entry.connectEnd - entry.connectStart}ms`);
console.log(`Request Time: ${entry.responseStart - entry.requestStart}ms`);
console.log(`Response Time: ${entry.responseEnd - entry.responseStart}ms`);
console.log(`DOM Processing Time: ${entry.domComplete - entry.domInteractive}ms`);
});
});
observer.observe({ entryTypes: ["navigation"] });
Ce code crée un PerformanceObserver qui écoute les entrées navigation
et enregistre diverses métriques de synchronisation dans la console. En analysant ces données, vous pouvez identifier des goulots d'étranglement tels qu'une recherche DNS lente, une connexion TCP lente, un traitement de requête lent, un traitement de réponse lent ou un traitement DOM lent. Vous pouvez alors prendre les mesures appropriées pour résoudre ces goulots d'étranglement, comme l'optimisation de votre configuration DNS, l'amélioration des performances de votre serveur ou l'optimisation de votre code HTML et JavaScript.
Optimisation SEO : Utilisez des mots-clés pertinents de manière naturelle dans tout le contenu. Dans cette section, des mots-clés comme "timing de navigation", "temps de recherche DNS", "temps de connexion TCP" et "processus de chargement de la page" sont intégrés de manière fluide.
5. Surveillance des Décalages de Mise en Page
Le type d'entrée layout-shift
suit les décalages de mise en page inattendus sur la page. Ces décalages peuvent être déroutants pour les utilisateurs et avoir un impact négatif sur l'expérience utilisateur. Ils se produisent souvent à cause d'images sans dimensions, de publicités qui se chargent tardivement ou de contenu injecté dynamiquement. Vous pouvez utiliser le code suivant pour surveiller les décalages de mise en page :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.warn(`Layout Shift: ${entry.name}, Value: ${entry.value}`);
console.warn(`Layout Shift Had Recent Input: ${entry.hadRecentInput}`);
console.warn(`Layout Shift Sources: ${JSON.stringify(entry.sources)}`);
});
});
observer.observe({ entryTypes: ["layout-shift"] });
Ce code crée un PerformanceObserver qui écoute les entrées layout-shift
et enregistre la valeur du décalage (un score représentant l'ampleur du décalage) dans la console. Une valeur plus élevée indique un décalage plus important. La propriété hadRecentInput
indique si le décalage s'est produit dans les 500 ms suivant une entrée utilisateur. Les décalages déclenchés par une entrée utilisateur sont généralement considérés comme moins problématiques. La propriété sources
fournit des détails sur les éléments qui ont causé le décalage. En analysant ces données, vous pouvez identifier et corriger les problèmes de décalage de mise en page en spécifiant les dimensions des images, en réservant de l'espace pour les publicités et en évitant d'injecter dynamiquement du contenu qui peut provoquer des réagencements.
Information Actionnable : Utilisez des outils comme Lighthouse de Google pour identifier les problèmes de décalage de mise en page et obtenir des recommandations pour les corriger. Donnez la priorité à la correction des décalages qui se produisent sans intervention de l'utilisateur.
6. Mesure du Largest Contentful Paint (LCP)
Le type d'entrée largest-contentful-paint
mesure le temps nécessaire pour que le plus grand élément de contenu devienne visible sur la page. Le LCP est un Core Web Vital qui reflète la vitesse de chargement perçue de la page. Un bon score LCP est de 2,5 secondes ou moins. Vous pouvez utiliser le code suivant pour mesurer le LCP :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`Largest Contentful Paint: ${entry.startTime}ms`);
console.log(`LCP Element: ${entry.element}`);
console.log(`LCP URL: ${entry.url}`);
});
});
observer.observe({ entryTypes: ["largest-contentful-paint"] });
Ce code crée un PerformanceObserver qui écoute les entrées largest-contentful-paint
et enregistre le temps de début, l'élément et l'URL dans la console. En analysant ces données, vous pouvez identifier le plus grand élément de contenu et optimiser son temps de chargement en optimisant la taille de l'image, en utilisant un CDN ou en préchargeant la ressource.
Perspective Globale : Considérez que différents utilisateurs auront différents éléments LCP en fonction de la taille et de la résolution de leur écran. Concevez votre application pour garantir un bon score LCP sur une variété d'appareils et de tailles d'écran.
7. Mesure du First Input Delay (FID)
Le type d'entrée first-input-delay
mesure le temps que met le navigateur à répondre à la première interaction de l'utilisateur (par exemple, un clic ou un tap). Le FID est un autre Core Web Vital qui reflète l'interactivité de la page. Un bon score FID est de 100 millisecondes ou moins. Vous pouvez utiliser le code suivant pour mesurer le FID :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`First Input Delay: ${entry.processingStart - entry.startTime}ms`);
console.log(`Event Type: ${entry.name}`);
console.log(`Target Element: ${entry.target}`);
});
});
observer.observe({ type: "first-input", buffered: true });
Ce code crée un PerformanceObserver qui écoute les entrées first-input
et enregistre le délai, le type d'événement et l'élément cible dans la console. En analysant ces données, vous pouvez identifier les causes des longs délais d'entrée et optimiser votre code JavaScript pour réduire le temps passé sur le thread principal.
Information Actionnable : Divisez les tâches de longue durée en plus petits morceaux, utilisez des web workers pour décharger les tâches sur un thread d'arrière-plan, et optimisez vos écouteurs d'événements pour réduire le temps de traitement des interactions utilisateur.
Techniques Avancées et Considérations
En plus des cas d'utilisation de base décrits ci-dessus, l'API Performance Observer peut être utilisée dans des scénarios plus avancés pour obtenir des informations plus approfondies sur la performance des applications web. Voici quelques techniques et considérations avancées :
1. Utilisation de la mise en mémoire tampon (Buffering)
L'option buffered
dans la méthode observe()
vous permet de récupérer les entrées de performance historiques qui ont été enregistrées avant la création du PerformanceObserver. C'est utile pour capturer les données de performance qui se produisent lors du chargement initial de la page ou avant que votre code de surveillance ne soit chargé. Par exemple :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`Entry: ${entry.name}, Type: ${entry.entryType}, Duration: ${entry.duration}ms`);
});
});
observer.observe({ entryTypes: ["navigation", "resource"], buffered: true });
Ce code crée un PerformanceObserver qui écoute les entrées navigation
et resource
et récupère toutes les entrées historiques qui ont été enregistrées avant la création de l'observateur.
2. Filtrage des Entrées de Performance
Vous pouvez filtrer les entrées de performance en fonction de critères spécifiques pour vous concentrer sur les données les plus pertinentes pour votre analyse. Par exemple, vous pouvez filtrer les entrées de ressources en fonction de leur URL ou de leur type de contenu :
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
if (entry.entryType === "resource" && entry.name.endsWith(".jpg")) {
console.log(`Image Resource: ${entry.name}, Duration: ${entry.duration}ms`);
}
});
});
observer.observe({ entryTypes: ["resource"] });
Ce code crée un PerformanceObserver qui écoute les entrées resource
et les filtre pour n'inclure que les entrées des ressources image avec une extension .jpg
.
3. Utilisation des Web Workers
Pour éviter d'impacter la performance du thread principal, vous pouvez décharger la surveillance et l'analyse de la performance sur un web worker. Cela vous permet de collecter et de traiter les données de performance en arrière-plan sans bloquer l'interface utilisateur. Par exemple, vous pouvez créer un web worker qui écoute les événements de performance et envoie les données au thread principal pour analyse.
Directive de Rédaction Globale : Utilisez des exemples pertinents pour un public mondial. Évitez les exemples spécifiques à un pays ou une culture particulière.
4. Intégration avec des Plateformes d'Analyse
L'API Performance Observer peut être intégrée à des plateformes d'analyse pour collecter et analyser les données de performance dans un emplacement centralisé. Cela vous permet de suivre les tendances de performance au fil du temps, d'identifier les régressions de performance et de corréler les métriques de performance avec d'autres données sur le comportement des utilisateurs. Vous pouvez envoyer des entrées de performance à votre plateforme d'analyse en utilisant son API ou en les enregistrant sur un point de terminaison côté serveur.
5. Utilisation de Polyfills pour les Navigateurs Anciens
Bien que l'API Performance Observer soit prise en charge par la plupart des navigateurs modernes, elle peut ne pas être disponible dans les navigateurs plus anciens. Pour prendre en charge les anciens navigateurs, vous pouvez utiliser un polyfill qui fournit une implémentation de secours de l'API. Plusieurs polyfills sont disponibles en ligne que vous pouvez utiliser dans votre application.
Meilleures Pratiques pour l'Utilisation de l'API Performance Observer
Pour utiliser efficacement l'API Performance Observer et éviter les pièges courants, suivez ces meilleures pratiques :
- Ne surveillez que les métriques pertinentes pour vos objectifs. Évitez de collecter des données excessives qui peuvent impacter la performance.
- Utilisez le filtrage pour vous concentrer sur les données les plus importantes. Filtrez les entrées de performance en fonction de critères spécifiques pour réduire la quantité de données à traiter.
- Déchargez la surveillance de la performance sur un web worker. Cela empêchera la surveillance de la performance d'impacter la performance du thread principal.
- Intégrez avec des plateformes d'analyse pour suivre les tendances de performance au fil du temps. Cela vous permettra d'identifier les régressions de performance et de corréler les métriques de performance avec d'autres données sur le comportement des utilisateurs.
- Utilisez des polyfills pour prendre en charge les navigateurs plus anciens. Cela garantira que votre code de surveillance de la performance fonctionne sur un large éventail de navigateurs.
- Testez minutieusement votre code de surveillance de la performance. Assurez-vous que votre code n'introduit pas de problèmes de performance par lui-même.
- Soyez attentif aux réglementations sur la confidentialité des données. Assurez-vous de ne collecter aucune information personnellement identifiable (PII) sans le consentement de l'utilisateur.
Optimisation SEO : Créez une méta-description engageante. Une description concise résumant le contenu de l'article de blog est fournie dans les métadonnées JSON.
Conclusion
L'API Performance Observer est un outil puissant qui permet aux développeurs de surveiller et d'analyser les métriques de performance d'exécution, d'identifier les goulots d'étranglement et d'optimiser leurs applications web pour une expérience utilisateur plus fluide, plus rapide et plus agréable. En comprenant les concepts et fonctionnalités clés de l'API, et en suivant les meilleures pratiques pour son utilisation, vous pouvez obtenir des informations précieuses sur la performance de vos applications et offrir une meilleure expérience à vos utilisateurs, quel que soit leur emplacement ou leur appareil. À mesure que les applications web deviennent de plus en plus complexes, l'API Performance Observer continuera d'être un outil essentiel pour garantir des performances optimales et la satisfaction des utilisateurs.
N'oubliez pas de donner la priorité à l'expérience utilisateur avant tout. L'optimisation des performances doit toujours être motivée par l'objectif de fournir une expérience transparente et agréable à vos utilisateurs. En utilisant efficacement l'API Performance Observer, vous pouvez acquérir une compréhension plus approfondie des performances de votre application et prendre des décisions éclairées pour améliorer l'expérience utilisateur.
En considérant attentivement les implications globales de la performance, les développeurs peuvent créer des applications web rapides, réactives et accessibles aux utilisateurs du monde entier. Cela nécessite une approche holistique qui prend en compte des facteurs tels que la latence du réseau, les capacités des appareils et les préférences culturelles.