You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/fr/5-browser-extension/3-background-tasks-and-perf.../README.md

588 lines
34 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Projet dextension de navigateur Partie 3 : Découvrez les tâches en arrière-plan et les performances
```mermaid
journey
title Votre parcours d'optimisation des performances
section Fondation
Apprendre les outils du navigateur: 3: Student
Comprendre le profilage: 4: Student
Identifier les goulots d'étranglement: 4: Student
section Fonctionnalités avancées
Construire un système de couleurs: 4: Student
Créer des tâches en arrière-plan: 5: Student
Mettre à jour les icônes dynamiquement: 5: Student
section Optimisation
Surveiller les performances: 5: Student
Déboguer les problèmes: 4: Student
Polir l'expérience: 5: Student
```
Vous vous êtes déjà demandé pourquoi certaines extensions de navigateur sont réactives et rapides alors que dautres semblent lentes ? Le secret réside dans ce qui se passe en coulisses. Pendant que les utilisateurs naviguent dans linterface de votre extension, un monde entier de processus en arrière-plan gère discrètement la récupération des données, la mise à jour des icônes et la gestion des ressources système.
Voici notre dernière leçon de la série sur les extensions de navigateur, et nous allons faire en sorte que votre traceur dempreinte carbone fonctionne parfaitement. Vous allez ajouter des mises à jour dynamiques de licône et apprendre à repérer les problèmes de performance avant quils ne deviennent problématiques. Cest un peu comme régler une voiture de course - de petites optimisations peuvent faire une énorme différence dans le fonctionnement global.
À la fin, vous aurez une extension soignée et comprendrez les principes de performance qui distinguent les bonnes applications web des excellentes. Plongeons dans le monde de loptimisation des navigateurs.
## Quiz avant la leçon
[Quiz avant la leçon](https://ff-quizzes.netlify.app/web/quiz/27)
### Introduction
Dans nos leçons précédentes, vous avez construit un formulaire, connecté celui-ci à une API et abordé la récupération asynchrone des données. Votre extension prend belle forme.
Il faut maintenant ajouter les touches finales - comme faire en sorte que licône de lextension change de couleur selon les données carbone. Cela me rappelle comment la NASA a dû optimiser chaque système du vaisseau Apollo. Ils ne pouvaient se permettre aucun cycle ou mémoire gaspillée car des vies dépendaient de la performance. Même si notre extension de navigateur nest pas aussi critique, les mêmes principes sappliquent - un code efficace crée de meilleures expériences utilisateur.
```mermaid
mindmap
root((Performance & Tâches en Arrière-plan))
Browser Performance
Pipeline de Rendu
Optimisation des Ressources
Manipulation du DOM
Exécution de JavaScript
Profiling Tools
Outils de Développement
Onglet Performance
Analyse de la Chronologie
Détection des Goulots d'Étranglement
Extension Architecture
Scripts d'Arrière-plan
Scripts de Contenu
Transmission de Messages
Gestion des Icônes
Optimization Strategies
Fractionnement du Code
Chargement Paresseux
Mise en Cache
Compression des Ressources
Visual Feedback
Icônes Dynamiques
Codage Couleur
Mises à Jour en Temps Réel
Expérience Utilisateur
```
## Bases de la performance web
Quand votre code fonctionne efficacement, les personnes peuvent réellement *sentir* la différence. Vous connaissez ce moment où une page charge instantanément ou une animation est fluide ? Cest la bonne performance à lœuvre.
La performance ne concerne pas seulement la vitesse - il sagit de créer des expériences web qui paraissent naturelles au lieu dêtre lourdes et frustrantes. Aux débuts de linformatique, Grace Hopper gardait célèbrement une nanoseconde (un morceau de fil denviron un pied de long) sur son bureau pour montrer jusquoù la lumière voyage en un milliardième de seconde. Cétait sa façon dexpliquer pourquoi chaque microseconde compte en informatique. Explorons les outils de détective qui vous aident à comprendre ce qui ralentit les choses.
> « La performance dun site web repose sur deux choses : la rapidité de chargement de la page, et la rapidité du code qui sy exécute. » -- [Zack Grossbart](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/)
Le sujet de la façon de rendre vos sites ultra-rapides sur tous types dappareils, pour tous types dutilisateurs, dans toutes sortes de situations, est logiquement vaste. Voici quelques points à garder en tête lorsque vous construisez un projet web standard ou une extension de navigateur.
La première étape pour optimiser votre site est de comprendre ce qui se passe réellement sous le capot. Heureusement, votre navigateur est équipé doutils de détection puissants intégrés.
```mermaid
flowchart LR
A[HTML] --> B[Analyse]
B --> C[Arbre DOM]
D[CSS] --> E[Analyse]
E --> F[CSSOM]
G[JavaScript] --> H[Exécuter]
C --> I[Arbre de rendu]
F --> I
H --> I
I --> J[Mise en page]
J --> K[Peindre]
K --> L[Composer]
L --> M[Afficher]
subgraph "Chemin de rendu critique"
N["1. Analyser HTML"]
O["2. Analyser CSS"]
P["3. Exécuter JS"]
Q["4. Construire l'arbre de rendu"]
R["5. Disposer les éléments"]
S["6. Peindre les pixels"]
T["7. Composer les calques"]
end
style M fill:#e8f5e8
style I fill:#fff3e0
style H fill:#ffebee
```
Pour ouvrir les Outils de développement dans Edge, cliquez sur ces trois points en haut à droite, puis allez dans Plus doutils > Outils de développement. Ou utilisez le raccourci clavier : `Ctrl` + `Shift` + `I` sur Windows ou `Option` + `Command` + `I` sur Mac. Une fois là, cliquez sur longlet Performance - cest ici que vous ferez votre enquête.
**Voici votre boîte à outils de détective de performance :**
- **Ouvrez** les Outils de développement (vous les utiliserez constamment en tant que développeur !)
- **Allez** à longlet Performance - pensez-y comme au tracker dactivité physique de votre application web
- **Appuyez** sur le bouton Enregistrer et regardez votre page en action
- **Étudiez** les résultats pour repérer ce qui ralentit les choses
Essayons cela. Ouvrez un site web (Microsoft.com fonctionne bien) et cliquez sur ce bouton « Enregistrer ». Maintenant, rafraîchissez la page et regardez le profileur capturer tout ce qui se passe. Quand vous arrêtez lenregistrement, vous verrez une répartition détaillée de comment le navigateur « script », « rend » et « peint » le site. Cela me fait penser à la manière dont le centre de contrôle de mission surveille chaque système durant le lancement dune fusée - vous obtenez des données en temps réel sur ce qui se passe et quand.
![Edge profiler](../../../../translated_images/fr/profiler.5a4a62479c5df01c.webp)
✅ La [Documentation Microsoft](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) propose beaucoup plus de détails si vous souhaitez approfondir
> Astuce de pro : Vide le cache de votre navigateur avant de tester pour voir comment votre site performe pour les visiteurs de la première fois - cest généralement très différent des visites répétées !
Sélectionnez des éléments dans la timeline du profil pour zoomer sur des événements qui se produisent pendant le chargement de votre page.
Prenez un instantané des performances de votre page en sélectionnant une partie de la timeline du profil et en regardant le panneau de résumé :
![Edge profiler snapshot](../../../../translated_images/fr/snapshot.97750180ebcad737.webp)
Consultez le panneau du journal des événements pour voir si un événement a duré plus de 15 ms :
![Edge event log](../../../../translated_images/fr/log.804026979f3707e0.webp)
✅ Familiarisez-vous avec votre profileur ! Ouvrez les outils de développement sur ce site et voyez sil y a des goulots détranglement. Quel est lactif qui charge le plus lentement ? Le plus rapidement ?
```mermaid
flowchart TD
A[Ouvrir DevTools] --> B[Naviguer vers l'onglet Performance]
B --> C[Cliquez sur le bouton Enregistrer]
C --> D[Effectuer des actions]
D --> E[Arrêter l'enregistrement]
E --> F{Analyser les résultats}
F --> G[Vérifier la chronologie]
F --> H[Examiner le réseau]
F --> I[Examiner les scripts]
F --> J[Identifier les événements de peinture]
G --> K{Tâches longues ?}
H --> L{Gros actifs ?}
I --> M{Blocage de rendu ?}
J --> N{Peintures coûteuses ?}
K -->|Oui| O[Optimiser JavaScript]
L -->|Oui| P[Compresser les actifs]
M -->|Oui| Q[Ajouter Async/Defer]
N -->|Oui| R[Simplifier les styles]
O --> S[Tester à nouveau]
P --> S
Q --> S
R --> S
style A fill:#e1f5fe
style F fill:#fff3e0
style S fill:#e8f5e8
```
## Que rechercher lors du profiling
Lancer le profileur nest que le début - le véritable talent consiste à savoir ce que ces graphiques colorés vous disent réellement. Ne vous inquiétez pas, vous apprendrez à les lire. Les développeurs expérimentés savent repérer les signes avant-coureurs avant quils ne deviennent de véritables problèmes.
Parlons des suspects habituels - les fauteurs de trouble de la performance qui ont tendance à sinfiltrer dans les projets web. Comme Marie Curie qui devait surveiller attentivement les niveaux de radiation dans son laboratoire, nous devons observer certains schémas qui annoncent des problèmes. Les détecter tôt vous évitera (et à vos utilisateurs) beaucoup de frustrations.
**Tailles des actifs** : Les sites web sont devenus « plus lourds » au fil des ans, et une grande partie de ce poids supplémentaire provient des images. Cest comme si nous remplissions nos valises numériques de plus en plus.
✅ Consultez l[Internet Archive](https://httparchive.org/reports/page-weight) pour voir comment la taille des pages a évolué dans le temps - cest très révélateur.
**Voici comment garder vos actifs optimisés :**
- **Compressez** ces images ! Les formats modernes comme WebP peuvent réduire de manière spectaculaire la taille des fichiers
- **Servez** la bonne taille dimage pour chaque appareil - pas besoin denvoyer des images de bureau gigantesques aux téléphones
- **Minifiez** votre CSS et JavaScript - chaque octet compte
- **Utilisez** le chargement différé (lazy loading) pour que les images ne se téléchargent que lorsque lutilisateur fait défiler la page jusquà elles
**Parcours du DOM** : Le navigateur doit construire son Document Object Model en fonction du code que vous écrivez, donc pour une bonne performance de page, il faut garder vos balises au minimum, utiliser et styler uniquement ce qui est nécessaire. À ce propos, le CSS en excès associé à une page peut être optimisé ; par exemple, les styles nécessaires uniquement sur une page ne doivent pas être inclus dans la feuille de style principale.
**Stratégies clés pour loptimisation du DOM :**
- **Minimiser** le nombre déléments HTML et les niveaux dimbrication
- **Supprimer** les règles CSS inutilisées et consolider efficacement les feuilles de styles
- **Organiser** le CSS pour ne charger que ce qui est nécessaire pour chaque page
- **Structurer** le HTML de manière sémantique pour un meilleur parsing par le navigateur
**JavaScript** : Tout développeur JavaScript doit surveiller les scripts qui bloquent le rendu et qui doivent être chargés avant que le reste du DOM puisse être parcouru et rendu dans le navigateur. Pensez à utiliser `defer` avec vos scripts en ligne (comme dans le module Terrarium).
**Techniques modernes doptimisation JavaScript :**
- **Utilisation** de lattribut `defer` pour charger les scripts après lanalyse du DOM
- **Implémentation** du découpage du code (code splitting) pour ne charger que le JavaScript nécessaire
- **Application** du chargement différé pour les fonctionnalités non critiques
- **Minimisation** de lutilisation des bibliothèques et frameworks lourds quand cest possible
✅ Essayez quelques sites sur un [site de test de vitesse](https://www.webpagetest.org/) pour en savoir plus sur les contrôles courants effectués pour déterminer la performance dun site.
### 🔄 **Point pédagogique**
**Compréhension de la performance** : Avant de construire des fonctionnalités dextension, assurez-vous de pouvoir :
- ✅ Expliquer le chemin critique de rendu de HTML aux pixels
- ✅ Identifier les goulots détranglement courants en matière de performance dans les applications web
- ✅ Utiliser les outils développeur du navigateur pour profiler la performance dune page
- ✅ Comprendre comment la taille des actifs et la complexité du DOM impactent la vitesse
**Auto-évaluation rapide** : Que se passe-t-il lorsque vous avez du JavaScript bloquant le rendu ?
*Réponse : Le navigateur doit télécharger et exécuter le script avant de pouvoir continuer à analyser le HTML et à rendre la page*
**Impact réel sur la performance** :
- **Délai de 100 ms** : Les utilisateurs remarquent le ralentissement
- **Délai de 1 seconde** : Les utilisateurs commencent à perdre leur concentration
- **3 secondes et plus** : 40 % des utilisateurs quittent la page
- **Réseaux mobiles** : La performance est encore plus cruciale
Maintenant que vous avez une idée de la façon dont le navigateur rend les actifs que vous lui envoyez, voyons les dernières étapes nécessaires pour compléter votre extension :
### Créer une fonction pour calculer la couleur
Nous allons maintenant créer une fonction qui transforme des données numériques en couleurs significatives. Pensez-y comme à un feu de circulation - vert pour lénergie propre, rouge pour une forte intensité carbone.
Cette fonction prendra les données CO2 de notre API et déterminera la couleur qui représente le mieux limpact environnemental. Cest similaire à la façon dont les scientifiques utilisent un code couleur dans des cartes de chaleur pour visualiser des données complexes - des températures océaniques à la formation détoiles. Ajoutons cela dans `/src/index.js`, juste après ces variables `const` que nous avons définies plus tôt:
```mermaid
flowchart LR
A[Valeur CO2] --> B[Trouver le point d'échelle le plus proche]
B --> C[Obtenir l'indice d'échelle]
C --> D[Assigner une couleur]
D --> E[Envoyer au Backend]
subgraph "Échelle des couleurs"
F["0-150 : Vert (Propre)"]
G["150-600 : Jaune (Modéré)"]
H["600-750 : Orange (Élevé)"]
I["750+ : Marron (Très élevé)"]
end
subgraph "Passage de message"
J[Script de contenu]
K[chrome.runtime.sendMessage]
L[Script d'arrière-plan]
M[Mise à jour de l'icône]
end
style A fill:#e1f5fe
style D fill:#e8f5e8
style E fill:#fff3e0
```
```javascript
function calculateColor(value) {
// Définir l'échelle d'intensité de CO2 (grammes par kWh)
const co2Scale = [0, 150, 600, 750, 800];
// Couleurs correspondantes du vert (propre) au brun foncé (forte émission de carbone)
const colors = ['#2AA364', '#F5EB4D', '#9E4229', '#381D02', '#381D02'];
// Trouver la valeur d'échelle la plus proche de notre entrée
const closestNum = co2Scale.sort((a, b) => {
return Math.abs(a - value) - Math.abs(b - value);
})[0];
console.log(`${value} is closest to ${closestNum}`);
// Trouver l'index pour la correspondance des couleurs
const num = (element) => element > closestNum;
const scaleIndex = co2Scale.findIndex(num);
const closestColor = colors[scaleIndex];
console.log(scaleIndex, closestColor);
// Envoyer un message de mise à jour de couleur au script en arrière-plan
chrome.runtime.sendMessage({ action: 'updateIcon', value: { color: closestColor } });
}
```
**Décomposons cette petite fonction astucieuse :**
- **Crée** deux tableaux - un pour les niveaux de CO2, un autre pour les couleurs (vert = propre, marron = sale !)
- **Trouve** la correspondance la plus proche de notre valeur CO2 réelle en triant astucieusement le tableau
- **Récupère** la couleur associée grâce à la méthode findIndex()
- **Envoie** un message au script darrière-plan de Chrome avec la couleur choisie
- **Utilise** les littéraux de gabarits (ces backticks) pour formater proprement les chaînes de caractères
- **Garde** tout organisé avec des déclarations const
L[API](https://developer.chrome.com/extensions/runtime) `chrome.runtime` est comme le système nerveux de votre extension - elle gère toutes les communications et tâches en coulisses :
> « Utilisez lAPI chrome.runtime pour récupérer la page darrière-plan, retourner des détails sur le manifeste, et écouter et répondre aux événements dans le cycle de vie de lapplication ou de lextension. Vous pouvez aussi utiliser cette API pour convertir les chemins relatifs des URLs en URLs entièrement qualifiées. »
**Pourquoi lAPI Chrome Runtime est si pratique :**
- **Permet** aux différentes parties de votre extension de communiquer entre elles
- **Gère** le travail en arrière-plan sans bloquer linterface utilisateur
- **Manage** les événements du cycle de vie de votre extension
- **Facilite** la transmission des messages entre scripts
✅ Si vous développez cette extension pour Edge, il pourrait vous surprendre que vous utilisiez une API chrome. Les versions récentes de Edge fonctionnent sur le moteur Chromium, donc vous pouvez exploiter ces outils.
```mermaid
architecture-beta
group browser(logos:chrome)[Navigateur]
service popup(logos:html5)[Interface contextuelle] in browser
service content(logos:javascript)[Script de contenu] in browser
service background(database)[Script d'arrière-plan] in browser
service api(logos:api)[API externe] in browser
popup:R -- L:content
content:R -- L:background
background:T -- B:api
content:T -- B:api
junction junctionCenter in browser
popup:R -- L:junctionCenter
junctionCenter:R -- L:background
```
> **Astuce de pro** : Si vous voulez profiler une extension de navigateur, lancez les outils de développement depuis lextension elle-même, car elle est son propre instance de navigateur séparée. Cela vous donne accès aux métriques spécifiques à lextension.
### Définir une couleur dicône par défaut
Avant de commencer à récupérer de vraies données, donnons à notre extension un point de départ. Personne naime regarder une icône vide ou cassée. On commencera avec une couleur verte pour que les utilisateurs sachent que lextension fonctionne dès linstallation.
Dans votre fonction `init()`, configurons cette icône verte par défaut :
```javascript
chrome.runtime.sendMessage({
action: 'updateIcon',
value: {
color: 'green',
},
});
```
**Ce que cette initialisation accomplit :**
- **Définit** une couleur verte neutre comme état par défaut
- **Fournit** un retour visuel immédiat lors du chargement de lextension
- **Établit** le schéma de communication avec le script darrière-plan
- **Assure** que les utilisateurs voient une extension fonctionnelle avant le chargement des données
### Appeler la fonction, exécuter lappel
Connectons maintenant tout cela pour que, quand de nouvelles données CO2 arrivent, votre icône se mette automatiquement à jour avec la bonne couleur. Cest comme connecter le dernier circuit dans un appareil électronique - tous les composants fonctionnent alors comme un système.
Ajoutez cette ligne juste après lobtention des données CO2 de lAPI :
```javascript
// Après avoir récupéré les données de CO2 depuis l'API
// laisser CO2 = data.data[0].intensity.actual;
calculateColor(CO2);
```
**Cette intégration accomplit :**
- **Relie** le flux de données API avec le système dindicateur visuel
- **Déclenche** automatiquement les mises à jour de licône quand de nouvelles données arrivent
- **Assure** un retour visuel en temps réel basé sur lintensité carbone actuelle
- **Maintient** la séparation des préoccupations entre la récupération des données et la logique daffichage
Et enfin, dans `/dist/background.js`, ajoutez lécouteur pour ces appels daction en arrière-plan :
```javascript
// Écouter les messages du script de contenu
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
if (msg.action === 'updateIcon') {
chrome.action.setIcon({ imageData: drawIcon(msg.value) });
}
});
// Dessiner une icône dynamique en utilisant l'API Canvas
// Emprunté à l'extension energy lollipop - belle fonctionnalité !
function drawIcon(value) {
// Créer un canvas hors écran pour de meilleures performances
const canvas = new OffscreenCanvas(200, 200);
const context = canvas.getContext('2d');
// Dessiner un cercle coloré représentant l'intensité carbone
context.beginPath();
context.fillStyle = value.color;
context.arc(100, 100, 50, 0, 2 * Math.PI);
context.fill();
// Retourner les données de l'image pour l'icône du navigateur
return context.getImageData(50, 50, 100, 100);
}
```
**Voici ce que fait ce script darrière-plan :**
- **Écoute** les messages de votre script principal (comme une réceptionniste répondant aux appels)
- **Traite** les requêtes updateIcon pour changer votre icône dans la barre doutils
- **Crée** de nouvelles icônes à la volée avec lAPI Canvas
- **Dessine** un simple cercle coloré qui montre lintensité carbone actuelle
- **Met à jour** votre barre doutils de navigateur avec la nouvelle icône
- **Utilise** OffscreenCanvas pour une performance fluide (pas de blocage de linterface)
✅ Vous en apprendrez plus sur lAPI Canvas dans les [leçons du Space Game](../../6-space-game/2-drawing-to-canvas/README.md).
```mermaid
sequenceDiagram
participant CS as Script de contenu
participant BG as Script d'arrière-plan
participant Canvas as OffscreenCanvas
participant Browser as Icône du navigateur
CS->>BG: sendMessage({action: 'updateIcon', color})
BG->>Canvas: new OffscreenCanvas(200, 200)
Canvas->>Canvas: getContext('2d')
Canvas->>Canvas: beginPath() + fillStyle + arc()
Canvas->>Canvas: fill() + getImageData()
Canvas->>BG: Retourner les données de l'image
BG->>Browser: chrome.action.setIcon(imageData)
Browser->>Browser: Mettre à jour l'icône de la barre d'outils
```
### 🔄 **Point pédagogique**
**Compréhension complète de lextension** : Vérifiez votre maîtrise de tout le système :
- ✅ Comment fonctionne le passage de messages entre les différents scripts de lextension ?
- ✅ Pourquoi utilisons-nous OffscreenCanvas au lieu du Canvas classique pour la performance ?
- ✅ Quel rôle joue lAPI Chrome Runtime dans larchitecture des extensions ?
- ✅ Comment lalgorithme de calcul des couleurs mappe-t-il les données au retour visuel ?
**Considérations de performance** : Votre extension démontre maintenant :
- **Messagerie efficace** : Communication claire entre les contextes des scripts
- **Rendu optimisé** : OffscreenCanvas empêche le blocage de linterface utilisateur
- **Mises à jour en temps réel** : Changements dynamiques de licône basés sur des données réelles
- **Gestion de la mémoire** : Nettoyage et gestion appropriés des ressources
**Il est temps de tester votre extension :**
- **Construisez** tout avec `npm run build`
- **Rechargez** votre extension dans le navigateur (noubliez pas cette étape)
- **Ouvrez** votre extension et regardez licône changer de couleur
- **Vérifiez** comment elle réagit aux données réelles de carbone du monde entier
Maintenant, vous saurez en un coup dœil sil est bon de lancer cette lessive ou sil vaut mieux attendre une énergie plus propre. Vous venez de créer quelque chose de vraiment utile et den apprendre sur la performance des navigateurs en chemin.
## Défi Agent GitHub Copilot 🚀
Utilisez le mode Agent pour accomplir le défi suivant :
**Description :** Améliorez les capacités de surveillance des performances de lextension en ajoutant une fonction qui suit et affiche les temps de chargement des différents composants de lextension.
**Consigne :** Créez un système de suivi de la performance pour lextension qui mesure et enregistre le temps nécessaire pour récupérer les données de CO2 via lAPI, calculer les couleurs, et mettre à jour licône. Ajoutez une fonction nommée `performanceTracker` qui utilise lAPI Performance pour mesurer ces opérations et afficher les résultats dans la console du navigateur avec des horodatages et des métriques de durée.
En savoir plus sur [le mode agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) ici.
## 🚀 Défi
Voici une mission de détective intéressante : choisissez quelques sites open source qui existent depuis des années (comme Wikipedia, GitHub ou Stack Overflow) et fouillez dans leur historique de commits. Pouvez-vous repérer où ils ont effectué des améliorations de performance ? Quels problèmes revenaient régulièrement ?
**Votre approche denquête :**
- **Cherchez** dans les messages de commits des mots comme « optimiser », « performance », ou « plus rapide »
- **Observez** des motifs — corrigent-ils toujours les mêmes types de problèmes ?
- **Identifiez** les coupables courants qui ralentissent les sites
- **Partagez** vos découvertes — dautres développeurs apprendront dexemples concrets
## Quiz Post-Cours
[Quiz post-cours](https://ff-quizzes.netlify.app/web/quiz/28)
## Revue & Auto-Étude
Envisagez de vous abonner à une [newsletter sur la performance](https://perf.email/)
Explorez comment les navigateurs mesurent la performance web en examinant les onglets performance dans leurs outils développeurs. Trouvez-vous des différences majeures ?
### ⚡ **Ce que vous pouvez faire dans les 5 prochaines minutes**
- [ ] Ouvrir le Gestionnaire des tâches du navigateur (Shift+Esc dans Chrome) pour voir lutilisation des ressources des extensions
- [ ] Utiliser longlet Performance de DevTools pour enregistrer et analyser les performances dune page web
- [ ] Vérifier la page Extensions du navigateur pour voir quelles extensions ralentissent le démarrage
- [ ] Essayer de désactiver temporairement des extensions pour observer les différences de performance
### 🎯 **Ce que vous pouvez accomplir cette heure-ci**
- [ ] Compléter le quiz post-cours et comprendre les concepts de performance
- [ ] Implémenter un script darrière-plan pour votre extension navigateur
- [ ] Apprendre à utiliser browser.alarms pour des tâches de fond efficaces
- [ ] Pratiquer le passage de messages entre scripts de contenu et scripts darrière-plan
- [ ] Mesurer et optimiser lutilisation des ressources de votre extension
### 📅 **Votre parcours performance sur une semaine**
- [ ] Réaliser une extension navigateur haute performance avec fonctionnalités darrière-plan
- [ ] Maîtriser les service workers et larchitecture moderne des extensions
- [ ] Implémenter des stratégies efficaces de synchronisation et mise en cache des données
- [ ] Apprendre des techniques avancées de débogage pour la performance dextension
- [ ] Optimiser votre extension pour la fonctionnalité ET lefficacité des ressources
- [ ] Créer des tests complets pour les scénarios de performance dextension
### 🌟 **Votre maîtrise de loptimisation sur un mois**
- [ ] Construire des extensions navigateur de niveau entreprise avec performance optimale
- [ ] Apprendre à utiliser Web Workers, Service Workers, et les performances web modernes
- [ ] Contribuer à des projets open source axés sur loptimisation des performances
- [ ] Maîtriser larchitecture interne des navigateurs et les techniques avancées de débogage
- [ ] Créer des outils de surveillance de la performance et des guides des bonnes pratiques
- [ ] Devenir un expert en performance aidant à optimiser les applications web
## 🎯 Votre chronologie de maîtrise des extensions navigateur
```mermaid
timeline
title Progression complète du développement d'extension
section Fondamentaux de la performance (20 minutes)
Profilage du navigateur : Maîtrise de DevTools
: Analyse de la chronologie
: Identification des goulets d'étranglement
: Chemin de rendu critique
section Tâches en arrière-plan (25 minutes)
Architecture de l'extension : Passage de messages
: Scripts en arrière-plan
: Utilisation de l'API Runtime
: Communication inter-contexte
section Retour visuel (30 minutes)
Interface dynamique : Algorithmes de calcul des couleurs
: Intégration de l'API Canvas
: Génération d'icônes
: Mises à jour en temps réel
section Optimisation de la performance (35 minutes)
Code efficace : Opérations asynchrones
: Gestion de la mémoire
: Nettoyage des ressources
: Surveillance des performances
section Prêt pour la production (45 minutes)
Finition & tests : Compatibilité inter-navigateurs
: Gestion des erreurs
: Expérience utilisateur
: Validation de la performance
section Fonctionnalités avancées (1 semaine)
Écosystème d'extension : Chrome Web Store
: Retour utilisateur
: Intégration analytique
: Gestion des mises à jour
section Développement professionnel (2 semaines)
Extensions d'entreprise : Collaboration en équipe
: Revues de code
: Pipelines CI/CD
: Audits de sécurité
section Maîtrise experte (1 mois)
Expertise plateforme : API Chrome avancées
: Optimisation de la performance
: Modèles d'architecture
: Contribution open source
```
### 🛠️ Votre boîte à outils complète pour le développement dextensions
Après avoir terminé cette trilogie, vous maîtrisez désormais :
- **Architecture du navigateur** : compréhension approfondie de lintégration des extensions aux systèmes du navigateur
- **Profilage de performance** : capacité à identifier et corriger les goulets détranglement avec les outils développeurs
- **Programmation asynchrone** : modèles JavaScript modernes pour des opérations réactives et non bloquantes
- **Intégration API** : récupération des données externes avec authentification et gestion des erreurs
- **Design visuel** : mises à jour dinterface dynamiques et génération graphique basée sur Canvas
- **Passage de messages** : communication inter-scripts dans les architectures des extensions
- **Expérience utilisateur** : états de chargement, gestion des erreurs, et interactions intuitives
- **Compétences de production** : tests, débogage, et optimisation pour un déploiement réel
**Applications concrètes** : Vos compétences en développement dextension sappliquent directement à :
- **Applications Web Progressives** : architectures similaires et modèles de performance
- **Applications de bureau Electron** : applications multiplateformes utilisant les technologies web
- **Applications hybrides mobiles** : développement Cordova/PhoneGap utilisant les API web
- **Applications web dentreprise** : tableaux de bord complexes et outils de productivité
- **Extensions Chrome DevTools** : outils avancés pour développeurs et débogage
- **Intégration API Web** : toute application qui communique avec des services externes
**Impact professionnel** : Vous pouvez désormais :
- **Créer** des extensions navigateur prêtes pour la production, du concept au déploiement
- **Optimiser** la performance des applications web avec des outils de profilage standards du secteur
- **Architecturer** des systèmes scalables avec une séparation correcte des responsabilités
- **Déboguer** des opérations asynchrones complexes et la communication inter-contexte
- **Contribuer** aux projets open source dextensions et aux standards du navigateur
**Opportunités de niveau supérieur** :
- **Développeur Chrome Web Store** : publier des extensions pour des millions dutilisateurs
- **Ingénieur performance web** : spécialisé en optimisation et expérience utilisateur
- **Développeur plateforme navigateur** : contribuer au développement des moteurs de navigateur
- **Créateur de frameworks d'extensions** : construire des outils pour aider dautres développeurs
- **Relations développeurs** : partager vos connaissances via enseignement et création de contenu
🌟 **Succès débloqué** : Vous venez de créer une extension navigateur complète et fonctionnelle démontrant des pratiques professionnelles et des standards web modernes !
## Devoir
[Analysez un site pour la performance](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Avertissement** :
Ce document a été traduit à laide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions dassurer lexactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue dorigine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou dinterprétations erronées résultant de lutilisation de cette traduction.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->