Ce document décrit les optimisations appliquées aux assets du monorepo et fournit des guidelines pour maintenir de bonnes performances.
Le monorepo ai-jaztools a été optimisé pour réduire la taille des assets et améliorer les temps de chargement, tout en maintenant la lisibilité du code et sans système de build.
Total des assets: ~51.52 KB
- SVG: 3.43 KB (6 favicons optimisés)
- CSS: 30.88 KB (versions minifiées disponibles: 24.50 KB, 20.7% de réduction)
- JavaScript: 14.16 KB (5 modules utils)
- ICO: 4.29 KB (1 favicon)
- Avant: ~850B par fichier (avec commentaires et espaces)
- Après: 377B-619B par fichier
- Réduction moyenne: ~28-31% par fichier
- Optimisations appliquées:
- Suppression des commentaires XML
- Suppression des espaces inutiles
- Optimisation des attributs (rx/ry → rx seul)
- Compactage du formatage
- Avant: 30.88 KB (non minifié)
- Après: 24.50 KB (minifié)
- Réduction: 20.7%
- Fichiers minifiés:
variables.css: 2.40 KB → 1.60 KB (33.5% réduction)base.css: 2.82 KB → 1.99 KB (29.4% réduction)components.css: 11.53 KB → 8.64 KB (25.1% réduction)utilities.css: 14.13 KB → 12.28 KB (13.1% réduction)
- État: Déjà optimisé (pas de code mort, imports propres)
- Taille: 14.16 KB total (5 fichiers utils)
- ✅ Tous les favicons SVG optimisés (6 fichiers)
- ✅ Suppression des commentaires et espaces inutiles
- ✅ Optimisation des attributs (valeurs numériques, font-family)
- ✅ Vérifié: 4.29 KB (taille raisonnable pour un favicon ICO)
- ℹ️ Note: Pour une optimisation supplémentaire, utiliser un outil externe (ImageOptim, Squoosh)
- ✅ Directives
@applycorrigées: Remplacées par du CSS standard danscomponents.css- Les directives
@applyne fonctionnent pas sans préprocesseur CSS (Tailwind) - La classe
.buttona été convertie en CSS standard complet
- Les directives
- ✅ Versions minifiées créées (
.min.css) - ✅ Script de minification automatique:
scripts/minify-css.js - ✅ Réduction moyenne de 20.7%
- ✅ Doublon
.hiddensupprimé deutilities.css(déjà défini dansbase.css) - ✅ Note:
.gridexiste danscomponents.css(avec gap) etutilities.css(utilitaire simple) - intentionnel
- ✅ Code déjà optimisé (pas de code mort)
- ✅ Imports/exports propres (ES6 modules)
- ✅ Commentaires JSDoc conservés pour la documentation
- ✅ Attribut
loading="lazy"ajouté aux images dans les pages HTML:tools/feed-minitools/index.html(1 image)tools/feed-minitools/favorites-migrator/index.html(4 images externes)
Minifie les fichiers CSS du Design System.
Usage:
node scripts/minify-css.jsFonctionnalités:
- Supprime les commentaires (sauf licences)
- Supprime les espaces inutiles
- Compacte le code
- Génère des versions
.min.css - Affiche un rapport de réduction
Script principal d'optimisation et de reporting.
Usage:
# Générer un rapport des assets
node scripts/optimize-assets.js --report
# Optimiser tous les SVG
node scripts/optimize-assets.js --optimize-svgFonctionnalités:
- Optimisation automatique des SVG
- Génération de rapports de taille
- Statistiques détaillées par type d'asset
-
SVG:
- Utiliser des SVG optimisés (pas de commentaires, espaces minimaux)
- Utiliser le script
optimize-assets.jspour optimiser automatiquement - Préférer SVG pour les icônes et logos (meilleure compression)
-
Images raster (PNG, JPG):
- Utiliser WebP si possible (meilleure compression)
- Optimiser avec ImageOptim, Squoosh, ou similaire
- Utiliser
loading="lazy"pour les images non critiques
-
Favicons:
- SVG pour les navigateurs modernes
- ICO pour la compatibilité (taille raisonnable: <5KB)
-
Minification:
- Utiliser les versions
.min.cssen production - Conserver les versions non-minifiées pour le développement
- Exécuter
scripts/minify-css.jsaprès chaque modification
- Utiliser les versions
-
Organisation:
- Éviter les doublons entre fichiers
- Utiliser les variables CSS du Design System
- Ne pas utiliser de directives de préprocesseur (
@apply, etc.) sans build
-
Sélecteurs:
- Préférer les sélecteurs simples
- Éviter la sur-spécificité
- Utiliser les classes utilitaires du Design System
-
Modules:
- Utiliser ES6 modules (
import/export) - Éviter le code mort
- Optimiser les imports (ne pas importer tout un module si une seule fonction est nécessaire)
- Utiliser ES6 modules (
-
Lazy Loading:
- Charger les modules JavaScript à la demande si possible
- Utiliser
type="module"pour les modules ES6
-
Images:
- Toujours ajouter
loading="lazy"aux images non critiques - Utiliser
altdescriptif pour l'accessibilité - Préférer les formats modernes (WebP avec fallback)
- Toujours ajouter
-
CSS:
- Charger les CSS critiques en premier
- Utiliser les versions minifiées en production
- Éviter les
@importdans les CSS (préférer les<link>dans le HTML)
-
JavaScript:
- Utiliser
deferoutype="module"pour les scripts non critiques - Éviter les scripts bloquants dans le
<head>
- Utiliser
Pour utiliser les versions minifiées du CSS, remplacer dans vos fichiers HTML:
<!-- Avant -->
<link rel="stylesheet" href="../../shared/design-system/variables.css">
<link rel="stylesheet" href="../../shared/design-system/base.css">
<link rel="stylesheet" href="../../shared/design-system/components.css">
<link rel="stylesheet" href="../../shared/design-system/utilities.css">
<!-- Après (production) -->
<link rel="stylesheet" href="../../shared/design-system/variables.min.css">
<link rel="stylesheet" href="../../shared/design-system/base.min.css">
<link rel="stylesheet" href="../../shared/design-system/components.min.css">
<link rel="stylesheet" href="../../shared/design-system/utilities.min.css">Conserver les versions non-minifiées pour faciliter le débogage et la maintenance.
- ImageOptim (macOS): Optimisation automatique d'images
- Squoosh (web): Compression d'images avec prévisualisation
- SVGO: Optimisation SVG en ligne de commande
- CSS Minifier (en ligne): Pour minification manuelle si nécessaire
- Scripts fournis:
scripts/minify-css.js
- Lighthouse: Audit de performance intégré à Chrome DevTools
- PageSpeed Insights: Analyse de performance en ligne
- WebPageTest: Test de performance détaillé
Avant de déployer, vérifier:
- Tous les SVG sont optimisés
- Les versions minifiées CSS sont à jour
- Les images ont
loading="lazy"si approprié - Pas de doublons CSS
- Pas de code mort JavaScript
- Taille totale des assets < 100KB (objectif)
- Audit Lighthouse > 90 (Performance)
- Exécuter
node scripts/minify-css.jspour régénérer les.min.css - Vérifier qu'il n'y a pas de doublons
- Tester que les styles fonctionnent toujours
- Optimiser avec
node scripts/optimize-assets.js --optimize-svg(pour SVG) - Ajouter
loading="lazy"si l'image n'est pas critique - Vérifier la taille (objectif: < 50KB par image)
⚠️ Pas de build: Toutes les optimisations sont manuelles ou via scripts simples⚠️ Lisibilité préservée: Les versions non-minifiées sont maintenues pour le développement⚠️ Compatibilité: Les optimisations ne cassent pas la fonctionnalité existante