Optimisez le chargement des polices de votre site web pour la vitesse et l'expérience utilisateur. Apprenez des techniques pour prévenir le Flash of Unstyled Text (FOUT) et garantir une typographie cohérente.
Maîtriser le chargement des polices CSS : Optimisation des performances et prévention du FOUT pour une audience mondiale
Dans le paysage numérique actuel, très axé sur le visuel, la typographie joue un rôle crucial dans l'élaboration de l'esthétique et de l'expérience utilisateur d'un site web. Les polices que vous choisissez et la manière dont elles sont chargées peuvent avoir un impact significatif sur les performances, l'accessibilité et la qualité perçue de votre site. Pour une audience mondiale, c'est encore plus critique, car les utilisateurs peuvent accéder à votre site depuis diverses conditions de réseau, capacités d'appareils et emplacements géographiques. Ce guide complet plonge dans les subtilités du chargement des polices CSS, en se concentrant sur les techniques critiques d'optimisation des performances et les stratégies pour prévenir le redoutable Flash of Unstyled Text (FOUT) et le Flash of Invisible Text (FOIT).
Comprendre les défis du chargement des polices
Les polices web, bien qu'offrant une flexibilité de conception inégalée, introduisent un ensemble unique de défis de performance. Contrairement aux polices système qui sont facilement disponibles sur l'appareil d'un utilisateur, les polices web doivent être téléchargées par le navigateur avant de pouvoir être affichées. Ce processus, s'il n'est pas géré avec soin, peut entraîner :
- Temps de chargement de page lents : Les fichiers de polices volumineux peuvent retarder le rendu du texte, obligeant les utilisateurs à attendre plus longtemps pour accéder à votre contenu.
- Flash of Unstyled Text (FOUT) : Cela se produit lorsque le navigateur affiche initialement le texte avec une police de secours (souvent une police système par défaut) puis la remplace par la police web une fois celle-ci téléchargée. Cela peut être dérangeant et avoir un impact négatif sur l'expérience utilisateur.
- Flash of Invisible Text (FOIT) : Dans certains cas, les navigateurs peuvent masquer entièrement le texte jusqu'à ce que la police web soit téléchargée. Il en résulte un espace vide là où le texte devrait se trouver, ce qui peut être encore plus frustrant pour les utilisateurs.
- Rendu incohérent entre les appareils et les navigateurs : Différents navigateurs et systèmes d'exploitation peuvent gérer le rendu et le chargement des polices de manière légèrement différente, ce qui entraîne des divergences visuelles.
Relever ces défis est primordial pour créer une expérience web fluide et performante pour chaque visiteur, quels que soient son emplacement ou sa configuration technique.
L'anatomie du chargement des polices CSS
La base du chargement des polices web réside dans la règle CSS @font-face. Cette règle vous permet de spécifier des polices personnalisées à utiliser sur vos pages web.
La règle @font-face
Une déclaration @font-face typique ressemble à ceci :
@font-face {
font-family: 'MyCustomFont';
src: url('/fonts/mycustomfont.woff2') format('woff2'),
url('/fonts/mycustomfont.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
Détaillons les propriétés clés :
font-family: C'est le nom que vous utiliserez pour vous référer à la police dans votre CSS (par ex.,font-family: 'MyCustomFont', sans-serif;).src: Spécifie le chemin vers vos fichiers de polices. Il est crucial de fournir plusieurs formats pour une large compatibilité entre les navigateurs.font-weightetfont-style: Ces propriétés définissent la graisse (par ex., normal, bold) et le style (par ex., normal, italic) de la variante de police.font-display: C'est une propriété vitale pour contrôler la manière dont les polices sont affichées pendant le processus de chargement. Nous explorerons ses valeurs en détail plus tard.
Formats de police pour la compatibilité web
Pour garantir que vos polices s'affichent sur un large éventail de navigateurs et d'appareils, il est essentiel de les proposer dans différents formats. Les formats les plus courants et recommandés incluent :
- WOFF2 (Web Open Font Format 2) : C'est le format le plus moderne et le plus efficace, offrant une compression supérieure à WOFF. Il est pris en charge par tous les principaux navigateurs modernes.
- WOFF (Web Open Font Format) : Le successeur de TrueType et OpenType pour le web, offrant une bonne compression et une bonne prise en charge par les navigateurs.
- TrueType (.ttf) / OpenType (.otf) : Bien que ces formats soient largement pris en charge, ils offrent généralement une compression moins efficace pour le web par rapport à WOFF et WOFF2.
- Embedded OpenType (.eot) : Principalement pour les anciennes versions d'Internet Explorer. Moins courant de nos jours, mais peut être envisagé pour un support hérité extrêmement large.
- Polices SVG (.svg) : Prises en charge par les anciens appareils iOS. Généralement non recommandées pour les nouveaux projets en raison de problèmes de performance et de rendu.
Meilleure pratique : Donnez toujours la priorité à WOFF2 et WOFF. Une stratégie courante consiste à lister WOFF2 en premier dans la déclaration src, suivi de WOFF, permettant au navigateur de sélectionner le meilleur format disponible.
Stratégies d'optimisation des performances
L'optimisation du chargement des polices est une approche à multiples facettes. Elle implique non seulement de choisir les bons formats, mais aussi de les charger stratégiquement pour minimiser leur impact sur les performances perçues.
1. Sous-ensemble de polices (Subsetting)
De nombreuses familles de polices sont livrées avec une vaste gamme de caractères, y compris des glyphes pour plusieurs langues, des symboles mathématiques et des caractères spéciaux. Si votre site web s'adresse principalement à un public qui utilise un script spécifique (par ex., les alphabets latins), vous n'avez probablement pas besoin de tous ces caractères. Le "subsetting" de polices consiste à créer des fichiers de polices personnalisés qui n'incluent que les glyphes nécessaires à votre cas d'utilisation spécifique.
- Avantages : Réduit considérablement la taille des fichiers de polices, ce qui accélère les temps de téléchargement.
- Outils : Des outils en ligne comme le Webfont Generator de Font Squirrel, Glyphhanger, ou des outils en ligne de commande comme
glyphhangerpeuvent vous aider à créer des sous-ensembles de polices. Vous pouvez spécifier des jeux de caractères ou des plages Unicode à inclure.
Considération mondiale : Si votre site web cible plusieurs groupes linguistiques, vous devrez peut-être créer plusieurs sous-ensembles pour différents jeux de caractères. Soyez conscient de l'impact cumulatif sur le nombre de fichiers de polices téléchargés.
2. Polices variables
Les polices variables sont un format de police innovant qui permet à un seul fichier de police de contenir plusieurs variations d'une même police de caractères (par ex., différentes graisses, largeurs et styles). Au lieu de télécharger des fichiers distincts pour chaque graisse de police (par ex., `regular.woff2`, `bold.woff2`, `italic.woff2`), vous téléchargez un seul fichier de police variable.
- Avantages : Réduit considérablement le nombre de requêtes HTTP et la taille globale du téléchargement. Offre un contrôle précis sur les détails typographiques.
- Mise en œuvre : Assurez-vous que vos fichiers de polices sont disponibles dans des formats de polices variables basés sur OpenType-SVG ou TrueType. Les propriétés CSS comme
font-weight,font-stretchet les propriétés personnalisées (par ex.,--wght) sont utilisées pour sélectionner des variations spécifiques. - Support des navigateurs : Le support des polices variables est répandu dans les navigateurs modernes.
Exemple :
/* Définir une police variable */
@font-face {
font-family: 'MyVariableFont';
src: url('/fonts/myvariablefont.woff2') format('woff2');
font-weight: 100 900; /* Plage de graisses */
font-stretch: 50% 150%; /* Plage de largeurs */
}
body {
font-family: 'MyVariableFont', sans-serif;
font-weight: 700; /* Définition de la graisse */
}
h1 {
font-weight: 900; /* Une graisse plus audacieuse */
}
.condensed-text {
font-stretch: 75%; /* Une largeur plus étroite */
}
3. Tirer parti de font-display
La propriété CSS font-display change la donne pour prévenir le FOUT et le FOIT. Elle dicte comment une police doit être affichée pendant que le navigateur la télécharge.
auto: Le navigateur utilise son comportement par dĂ©faut, qui est souvent Ă©quivalent Ăblock.block: Le navigateur crĂ©e une courte pĂ©riode de blocage (gĂ©nĂ©ralement jusqu'Ă 3 secondes). Pendant ce temps, le texte est invisible. Si la police n'est pas chargĂ©e Ă la fin de cette pĂ©riode, il utilisera la police de secours.swap: Le navigateur utilise immĂ©diatement la police de secours. Une fois la police web tĂ©lĂ©chargĂ©e, il l'Ă©change. C'est excellent pour prĂ©venir le FOIT et s'assurer que le texte est visible rapidement, bien que cela puisse provoquer un FOUT.fallback: Le navigateur crĂ©e une courte pĂ©riode de blocage (par ex., 1 seconde) suivie d'une courte pĂ©riode d'Ă©change (par ex., 3 secondes). Si la police n'est pas chargĂ©e pendant la pĂ©riode de blocage, il utilise la police de secours. Si la police est tĂ©lĂ©chargĂ©e pendant la pĂ©riode d'Ă©change, elle est utilisĂ©e ; sinon, la police de secours est conservĂ©e.optional: Similaire Ăfallbackmais avec une très courte pĂ©riode de blocage et aucune pĂ©riode d'Ă©change. Si la police n'est pas tĂ©lĂ©chargĂ©e pendant la pĂ©riode de blocage initiale, le navigateur utilisera la police de secours et ne tentera pas de l'Ă©changer plus tard. C'est idĂ©al pour les polices qui ne sont pas critiques pour le rendu initial du contenu ou pour les utilisateurs sur des connexions lentes, car cela priorise la disponibilitĂ© immĂ©diate du contenu.
Stratégie recommandée :
- Pour les polices critiques qui définissent l'aspect principal de votre marque (par ex., les titres, la navigation) : Utilisez
font-display: swap;oufont-display: fallback;pour garantir que le texte est lisible rapidement. - Pour les polices moins critiques (par ex., contenu secondaire, petits éléments décoratifs) : Envisagez
font-display: optional;pour éviter d'impacter les chemins de rendu critiques.
Exemple :
@font-face {
font-family: 'CriticalHeadingFont';
src: url('/fonts/criticalheadingfont.woff2') format('woff2');
font-display: swap;
}
@font-face {
font-family: 'OptionalBodyFont';
src: url('/fonts/optionalbodyfont.woff2') format('woff2');
font-display: optional;
}
4. Préchargement des polices
Vous pouvez demander au navigateur de télécharger les fichiers de polices critiques tôt dans le processus de chargement de la page en utilisant des indicateurs de ressource, spécifiquement preload.
- Comment ça marche : En ajoutant une balise
<link rel="preload" ...>dans le<head>de votre HTML, vous indiquez au navigateur que cette ressource est importante et doit être récupérée avec une haute priorité. - Avantages : Assure que les polices essentielles sont disponibles plus tôt, réduisant la probabilité de FOUT ou FOIT.
- Meilleure pratique : Ne préchargez que les polices qui sont critiques pour le rendu initial de votre page. Précharger trop de ressources peut avoir l'effet inverse.
Exemple :
<!-- Dans le <head> de votre HTML -->
<link rel="preload" href="/fonts/mycustomfont.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/myotherfont.woff2" as="font" type="font/woff2" crossorigin>
Considérations importantes pour le préchargement :
as="font": C'est crucial. Cela indique au navigateur le type de ressource.type="font/woff2": Spécifiez le type MIME du fichier de police.crossorigin: Incluez toujours cet attribut lors du préchargement de polices depuis une origine différente (par ex., un CDN) ou même depuis la même origine si elles pourraient être soumises à des politiques CORS. Pour les polices, la valeur doit êtreanonymousou simplementcrossorigin.
5. Chargement asynchrone des polices
Bien que preload soit efficace, vous voudrez parfois plus de contrôle sur le moment où les polices sont chargées, surtout si elles ne sont pas essentielles pour la fenêtre d'affichage initiale. Les techniques de chargement asynchrone impliquent souvent JavaScript.
- Web Font Loader (Typekit/Google Fonts) : Des bibliothèques comme le Web Font Loader peuvent fournir un contrôle précis sur le chargement des polices et les événements. Vous pouvez spécifier quand les polices doivent être chargées, que faire en cas d'échec du chargement et gérer l'échange de polices.
- Polices auto-hébergées avec JavaScript : Vous pouvez implémenter une logique JavaScript personnalisée pour charger dynamiquement les fichiers de polices.
Exemple utilisant un script hypothétique :
// JavaScript hypothétique pour le chargement asynchrone
WebFont.load({
google: {
families: ['Open Sans:400,700']
},
custom: {
families: ['MyCustomFont'],
urls: ['/fonts/mycustomfont.woff2']
},
active: function() {
// Les polices sont chargées, appliquez les styles ou déclenchez des événements
document.documentElement.classList.add('fonts-loaded');
}
});
Attention : Dépendre fortement de JavaScript pour le chargement des polices peut introduire ses propres goulots d'étranglement de performance s'il n'est pas géré avec soin. Assurez-vous que votre JavaScript est optimisé et chargé efficacement.
6. Optimisation des fichiers de polices
Au-delà du choix des bons formats, assurez-vous que vos fichiers de polices eux-mêmes sont optimisés :
- Compression : WOFF2 offre une excellente compression dès le départ.
- Mise en cache : Configurez votre serveur pour mettre en cache les fichiers de polices de manière appropriée avec des en-têtes de cache de longue durée. Cela garantit que les visiteurs récurrents n'ont pas besoin de retélécharger les polices.
- Compression Gzip/Brotli : Assurez-vous que votre serveur est configuré pour compresser les fichiers de polices (ainsi que d'autres ressources) en utilisant Gzip ou Brotli avant de les envoyer au client. Brotli offre généralement une meilleure compression que Gzip.
7. Piles de polices système
Pour certains scénarios, en particulier lorsqu'il s'agit de contenu critique sur des connexions à très faible bande passante ou pour assurer une lisibilité initiale maximale, l'utilisation de polices système est une stratégie viable. Vous pouvez définir une pile de polices qui inclut des polices système courantes, offrant une solution de secours élégante.
Exemple :
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
Cette pile priorise les polices système natives sur différents systèmes d'exploitation, garantissant que le texte est rendu immédiatement sans aucun délai de téléchargement. Vous pouvez combiner cela avec des polices web chargées plus tard pour une approche d'amélioration progressive.
Prévenir le FOUT et le FOIT : Une approche stratégique
L'objectif est d'équilibrer la performance perçue (la rapidité *ressentie* de la page) avec la performance réelle (la rapidité avec laquelle la page devient utilisable). Voici une répartition stratégique :
1. Prioriser les polices critiques
Identifiez les polices essentielles pour l'expérience utilisateur initiale :
- Titres
- Éléments de navigation
- Éléments clés de l'interface utilisateur
Pour celles-ci, utilisez :
font-display: swap;oufont-display: fallback;<link rel="preload">pour les versions WOFF2.
Cela garantit que le texte est visible rapidement, mĂŞme si cela signifie un bref flash de la police de secours.
2. Gérer les polices non critiques
Les polices utilisées pour le corps du texte ou les éléments moins proéminents peuvent être traitées avec moins d'urgence :
- Utilisez
font-display: optional; - Évitez de précharger ces polices, sauf si absolument nécessaire.
Cette stratégie garantit que si ces polices sont lentes à charger, elles ne bloquent pas le rendu de contenu plus important.
3. Tenir compte du contexte de l'utilisateur
Lors de la conception de votre stratégie de chargement de polices, pensez à votre audience mondiale :
- Vitesses de réseau : Les utilisateurs dans des régions avec des connexions Internet plus lentes seront plus sensibles aux fichiers de polices volumineux. Donnez la priorité aux formats efficaces comme WOFF2 et au "subsetting".
- Capacités de l'appareil : Les appareils mobiles peuvent avoir moins de puissance de traitement et des vitesses de téléchargement plus lentes que les ordinateurs de bureau.
- Langue et jeux de caractères : Si votre site prend en charge plusieurs langues, assurez-vous de ne charger que les jeux de caractères nécessaires pour chaque langue, ou proposez des choix de polices spécifiques à la langue.
4. Test et surveillance
La meilleure façon de s'assurer que vos optimisations sont efficaces est de procéder à des tests rigoureux :
- Outils de développement du navigateur : Utilisez les onglets Réseau et Performance des outils de développement de votre navigateur pour inspecter les temps de téléchargement des polices, le comportement de rendu et identifier les goulots d'étranglement. Simulez différentes conditions de réseau (par ex., 3G rapide, 3G lente).
- Outils d'audit de performance : Utilisez des outils comme Google PageSpeed Insights, GTmetrix et WebPageTest. Ces outils fournissent des rapports détaillés sur les performances de votre site, y compris des recommandations pour le chargement des polices.
- Real User Monitoring (RUM) : Mettez en œuvre des outils RUM pour recueillir des données de performance auprès d'utilisateurs réels sur différents appareils, navigateurs et emplacements. Cela fournit l'image la plus précise des performances de votre site.
Techniques et considérations avancées
1. HTTP/2 et HTTP/3
Les protocoles HTTP modernes (HTTP/2 et HTTP/3) offrent le multiplexage, qui permet d'envoyer plusieurs requêtes et réponses sur une seule connexion. Cela peut réduire la surcharge liée au téléchargement de nombreux petits fichiers de polices (par ex., différentes graisses et styles).
- Avantage : Atténue la pénalité pour la demande de multiples variations de police, rendant des techniques comme l'utilisation de fichiers séparés pour différentes graisses plus réalisables.
- Considération : Assurez-vous que votre serveur est configuré pour utiliser ces protocoles.
2. CSS critique
Le concept de CSS critique consiste à identifier et à intégrer en ligne le CSS nécessaire pour rendre le contenu situé au-dessus de la ligne de flottaison de votre page. Si vos polices personnalisées sont utilisées dans cette zone critique, vous pouvez inclure leurs déclarations @font-face dans le CSS critique.
- Avantage : Assure que les définitions de polices sont disponibles le plus tôt possible, ce qui peut aider à un rendu plus rapide.
- Attention : Gardez le CSS critique concis pour éviter de surcharger la réponse HTML initiale.
3. API de chargement de polices (expérimentale)
L'API de chargement de polices CSS fournit des interfaces JavaScript pour interroger l'état des polices et gérer leur chargement. Bien qu'elle soit encore en évolution et non universellement prise en charge, elle offre un contrôle programmatique puissant.
- Exemple : Utiliser
document.fonts.readypour savoir quand toutes les polices ont été chargées.
Conclusion : Créer une expérience utilisateur mondiale supérieure
Maîtriser le chargement des polices CSS est une compétence essentielle pour tout développeur web visant à créer des sites web performants et conviviaux. En comprenant les nuances des formats de police, en employant des techniques d'optimisation comme le "subsetting" et les polices variables, en utilisant stratégiquement font-display et en tirant parti des indicateurs de ressource comme preload, vous pouvez améliorer considérablement la vitesse de chargement de votre site et prévenir les changements visuels dérangeants comme le FOUT et le FOIT.
N'oubliez pas de toujours tenir compte de votre audience mondiale. Ce qui fonctionne de manière optimale pour les utilisateurs disposant d'une connexion haut débit peut ne pas être idéal pour ceux qui ont des connexions plus lentes et plus intermittentes. Une approche réfléchie du chargement des polices, combinée à des tests et une surveillance continus, garantira que votre site web offre une expérience cohérente, performante et visuellement attrayante à chaque utilisateur, partout dans le monde.
Points clés à retenir :
- Donnez la priorité à WOFF2 : C'est le format le plus efficace.
- Utilisez
font-display: Contrôlez le rendu pendant le chargement des polices (swapouoptionalsont souvent les meilleurs choix). preloadles polices critiques : Récupérez les polices essentielles tôt.- Créez des sous-ensembles de polices : Réduisez la taille des fichiers en n'incluant que les glyphes nécessaires.
- Explorez les polices variables : Pour des tailles de fichiers réduites et plus de contrôle typographique.
- Testez minutieusement : Simulez diverses conditions de réseau et d'appareils.
En mettant en œuvre ces stratégies, vous construirez des sites web plus rapides, plus résilients et plus accessibles qui répondent aux besoins diversifiés d'une base d'utilisateurs mondiale.