Documentation - Performance.
Découvrez Marssel : un framework CSS intelligent, configuration minimale, conçu pour des interfaces rapides et une expérience développeur simplifiée.
Démarrage
Concepts de base
Utilitaires
Performance et Chargement
Optimisez la vitesse d'affichage de votre site en contrôlant comment et quand les styles sont générés.
Chargement Critique (Critical CSS)
Pour éviter tout "flash" visuel (FOUC), Marssel identifie et génère en priorité les styles des éléments "critiques" de votre page (comme le header, la navigation, ou le footer).
Cette fonctionnalité (gérée par `getCriticalElements` et `processCriticalElements`) utilise une liste prédéfinie de sélecteurs header, nav, [role="navigation"] .no-lazy) pour trouver ces éléments et injecter leurs styles de manière synchrone avant le reste de la page.
Cela garantit que la structure principale de votre site est stylisée immédiatement au chargement, offrant une meilleure expérience utilisateur (LCP). La configuration des sélecteurs critiques se fait au moment de l'initialisation de Marssel.
Lazy Loading des Styles
Pour les pages très longues, il n'est pas nécessaire de générer les styles pour les éléments qui sont hors du champ de vision.
Lorsque l'option lazyload: true est activée lors de la configuration, Marssel utilise un `IntersectionObserver` pour ne traiter les classes Marssel d'un élément que lorsque celui-ci s'approche de la fenêtre d'affichage.
Cela réduit considérablement la taille de la feuille de style initiale et le temps de traitement au chargement de la page, améliorant le Time to Interactive (TTI).
// Exemple d'initialisation (conceptuel)
new Marssel({
lazyload: true,
criticalsSelectors: ["header", "footer", ".nav-main"]
});
Système de Cache Intelligent
Marssel implémente un système de cache intelligent qui accélère considérablement les chargements de pages suivants, particulièrement efficace lors de la navigation entre pages ou du refresh d'une même page.
Fonctionnement
Le cache sauvegarde automatiquement dans sessionStorage :
- Les règles CSS générées
- La map des sélecteurs et déclarations
- La liste des classes déjà traitées
Au chargement d'une nouvelle page (ou refresh), Marssel restaure instantanément ces données depuis le cache plutôt que de les régénérer, réduisant drastiquement le temps de traitement initial.
Compatibilité avec le Lazyload
Le cache est conçu pour fonctionner en harmonie avec le lazyload :
- Sans lazyload : Tous les styles de la page sont mis en cache
- Avec lazyload : Seules les classes déjà chargées (visibles) sont mises en cache
💡 Exemple de scénario
-
Premier chargement (sans cache) :
- Viewport visible : bg-[blue], p-[20px] → Chargés
- Bas de page : bg-[purple] → En attente (lazy)
-
L'utilisateur scroll :
- bg-[purple] → Chargé par lazyload
-
L'utilisateur quitte la page :
- Cache sauvegardé : {bg-[blue], p-[20px], bg-[purple]}
-
Refresh de la page (avec cache) :
- bg-[blue], p-[20px], bg-[purple] → ⚡ Restaurés instantanément
- Nouveau contenu : bg-[green] → Chargé normalement
Vérification et Debug
Vous pouvez vérifier le fonctionnement du cache via la console :
// Vérifier le contenu du cache
window.debugCache = () => {
const cache = sessionStorage.getItem('marssel_styles_cache');
if (cache) {
const parsed = JSON.parse(cache);
console.log('📦 Cache trouvé:', {
version: parsed.version,
timestamp: new Date(parsed.timestamp).toLocaleString(),
cssLength: parsed.css.length + ' caractères',
classesCount: parsed.loadedClasses.length + ' classes',
selectorsCount: Object.keys(parsed.selectorMap).length
});
// Voir les classes en cache
console.log('Classes:', parsed.loadedClasses);
} else {
console.log('❌ Aucun cache trouvé');
}
};
// Nettoyer le cache manuellement
window.marssel.clearStyleCache();
// Vérifier les classes actuellement chargées
console.log(window.marssel.styleManager.loadedClasses);
Invalidation automatique du cache
Le cache est automatiquement invalidé dans les cas suivants :
- Changement de HTML : Si les classes dans le DOM ont été modifiées (ajout, suppression, modification), le cache est automatiquement invalidé
- Changement de version : Le cache est invalidé lors d'une mise à jour de Marssel
- Fermeture du navigateur : Le cache utilise sessionStorage et est supprimé automatiquement
✅ Détection intelligente des changements
Marssel génère un hash des classes présentes dans le DOM. Si ce hash change (modification du HTML), le cache est automatiquement invalidé pour éviter tout conflit. Vous n'avez rien à faire !
Limitations
- Stockage : sessionStorage (≈5MB par domaine)
- Performance : La vérification du hash ajoute ~1-2ms au chargement initial (négligeable)
⚠️ Note importante
Le cache fonctionne automatiquement et ne nécessite aucune configuration. Il est conçu pour améliorer les performances sans impacter le comportement normal de Marssel.