Module HTML.10 – Performance & bonnes pratiques
Objectif
Maîtriser l'optimisation du chargement HTML, créer une structure propre, valider le HTML, et éviter les anti-patterns pour des sites performants et maintenables.
Théorie
Chargement et performance
Ordre de chargement
Structure optimale :
<!DOCTYPE html>
<html lang="fr">
<head>
<!-- CSS critique en premier -->
<link rel="stylesheet" href="critical.css">
<!-- Préchargement des ressources -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
</head>
<body>
<!-- Contenu visible immédiatement -->
<header>...</header>
<main>...</main>
<!-- JavaScript en fin de page -->
<script src="app.js" defer></script>
</body>
</html>
Préchargement
<link rel="preload"> : Charger tôt des ressources importantes
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="hero-image.jpg" as="image">
<link rel="prefetch"> : Charger en arrière-plan
<link rel="prefetch" href="next-page.html">
<link rel="dns-prefetch"> : Résoudre le DNS tôt
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
CSS critique
Inliner le CSS critique :
<head>
<style>
/* CSS critique (above-the-fold) */
header { ... }
.hero { ... }
</style>
<link rel="stylesheet" href="main.css">
</head>
JavaScript
defer : Exécute après le parsing
<script src="app.js" defer></script>
async : Télécharge et exécute en parallèle
<script src="analytics.js" async></script>
Position : Toujours en fin de <body> ou avec defer.
Structure propre
Indentation
✅ Bon :
<main>
<section>
<h2>Titre</h2>
<p>Contenu</p>
</section>
</main>
❌ Mauvais :
<main><section><h2>Titre</h2><p>Contenu</p></section></main>
Commentaires
Utiliser pour :
- Expliquer des sections complexes
- Marquer des TODOs
- Documenter la structure
<!-- Navigation principale -->
<nav>...</nav>
<!-- TODO: Ajouter sidebar -->
<aside>...</aside>
Organisation
Structure de fichiers :
projet/
├── index.html
├── about.html
├── css/
│ ├── style.css
│ └── reset.css
├── js/
│ └── main.js
├── images/
│ └── logo.png
└── fonts/
└── font.woff2
HTML valide
Validateur W3C
Outils :
- https://validator.w3.org/
- Extension navigateur
- Intégration IDE
Vérifier :
- Syntaxe correcte
- Balises fermées
- Attributs valides
- Structure sémantique
Doctype correct
<!DOCTYPE html>
Encodage UTF-8
<meta charset="UTF-8">
Attributs valides
❌ Mauvais :
<div class="header" id="header" style="color: red;">
✅ Bon :
<header id="header">
Anti-patterns à éviter
1. Tableaux pour la mise en page
❌ Mauvais :
<table>
<tr>
<td>Colonne gauche</td>
<td>Colonne droite</td>
</tr>
</table>
✅ Bon :
<div class="container">
<div class="colonne-gauche">...</div>
<div class="colonne-droite">...</div>
</div>
2. Inline styles partout
❌ Mauvais :
<p style="color: blue; font-size: 16px;">Texte</p>
✅ Bon :
<p class="texte-important">Texte</p>
3. JavaScript inline
❌ Mauvais :
<button onclick="alert('Clic')">Cliquer</button>
✅ Bon :
<button id="btn">Cliquer</button>
<script>
document.getElementById('btn').addEventListener('click', function() {
alert('Clic');
});
</script>
4. Balises obsolètes
❌ Mauvais :
<font color="red">Texte</font>
<center>Centré</center>
<b>Gras</b>
✅ Bon :
<p class="rouge">Texte</p>
<div class="centre">Centré</div>
<strong>Important</strong>
5. Attributs dépréciés
❌ Mauvais :
<img src="image.jpg" border="0">
<table cellpadding="10">
✅ Bon :
<img src="image.jpg">
<!-- Utiliser CSS pour le style -->
Bonnes pratiques
1. Structure sémantique
Utiliser les balises HTML5 sémantiques.
2. Accessibilité
Labels, alt, ARIA, navigation clavier.
3. Performance
- Images optimisées
- CSS/JS minifiés
- Préchargement
- Lazy loading
4. SEO
- Métadonnées complètes
- Structure sémantique
- URLs propres
5. Maintenabilité
- Code propre
- Commentaires appropriés
- Organisation claire
Exercices guidés
Exercice 1 : Optimisation du chargement
Créez une page avec :
- CSS critique inliné
- Préchargement de ressources
- JavaScript en fin de page avec
defer
Exercice 2 : Validation HTML
Créez une page et :
- Validez avec W3C Validator
- Corrigez toutes les erreurs
- Re-validez jusqu'à 0 erreur
Exercice 3 : Structure propre
Refactorisez un code HTML :
- Indentation correcte
- Commentaires appropriés
- Organisation claire
Exercice 4 : Éviter les anti-patterns
Identifiez et corrigez :
- Tableaux pour mise en page
- Inline styles
- JavaScript inline
- Balises obsolètes
Exercice 5 : Performance
Optimisez une page :
- Images optimisées
- Préchargement
- Lazy loading
- Minification
❌ Erreurs fréquentes
Erreur 1 : JavaScript en head
❌ Mauvais :
<head>
<script src="app.js"></script>
</head>
✅ Bon :
<body>
<!-- Contenu -->
<script src="app.js" defer></script>
</body>
Pourquoi : Bloque le rendu de la page.
Erreur 2 : CSS non critique en head
❌ Mauvais :
<head>
<link rel="stylesheet" href="non-critique.css">
</head>
✅ Bon :
<head>
<style>/* CSS critique */</style>
<link rel="stylesheet" href="main.css" media="print" onload="this.media='all'">
</head>
Pourquoi : Améliore le First Contentful Paint.
Erreur 3 : HTML non valide
❌ Mauvais :
<div><p>Texte</div>
✅ Bon :
<div><p>Texte</p></div>
Pourquoi : Problèmes de rendu, accessibilité.
Erreur 4 : Images non optimisées
❌ Mauvais :
<img src="photo-10mb.jpg" alt="Photo">
✅ Bon :
<img src="photo-optimized-200kb.jpg"
alt="Photo"
width="800"
height="600"
loading="lazy">
Pourquoi : Performance (temps de chargement).
Erreur 5 : Pas de préchargement
❌ Mauvais :
<link rel="stylesheet" href="font.css">
✅ Bon :
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="font.css">
Pourquoi : Réduit le temps de chargement des polices.
🚀 Mini-projet
Mission : Optimiser un site web complet
Prenez un site existant et optimisez-le :
Optimisations :
- Validation HTML (0 erreurs)
- Structure propre et sémantique
- Performance (préchargement, lazy loading)
- Images optimisées
- CSS/JS optimisés
- Anti-patterns corrigés
Tests :
- W3C Validator (0 erreurs)
- Lighthouse (score > 90)
- PageSpeed Insights
- Structure sémantique vérifiée
Critères :
- ✅ HTML valide
- ✅ Performance optimisée
- ✅ Structure propre
- ✅ Anti-patterns évités
- ✅ Bonnes pratiques appliquées
Objectif : Créer un site HTML performant, valide et maintenable.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez l'optimisation HTML et avez créé un site performant et valide.