Back

Stratégies Modernes de Chargement de Polices pour les Performances Web

Stratégies Modernes de Chargement de Polices pour les Performances Web

Les polices web peuvent faire ou défaire les performances de votre site. Une stratégie de polices mal implémentée entraîne du texte invisible, des décalages de mise en page et des utilisateurs frustrés. Pourtant, la plupart des développeurs chargent encore leurs polices comme en 2015—expédiant des fichiers massifs, ignorant les fonctionnalités CSS modernes et espérant que tout se passe bien.

Cet article couvre des stratégies pratiques de chargement de polices que vous pouvez implémenter dès aujourd’hui : exploiter la compression WOFF2, contrôler le rendu avec font-display, subdiviser les polices intelligemment, utiliser les piles de polices système comme solutions de secours, précharger les polices critiques et adopter les polices variables quand elles ont du sens. Vous apprendrez comment équilibrer performance et typographie tout en améliorant les Core Web Vitals.

Points Clés à Retenir

  • Le format WOFF2 seul fournit 30% de compression en plus et un support navigateur universel
  • La propriété font-display contrôle la visibilité du texte pendant le chargement des polices
  • La subdivision des polices peut réduire la taille des fichiers de 70% pour les sites monolingues
  • Les piles de polices système fournissent des solutions de secours instantanées et préviennent les décalages de mise en page
  • Les polices variables fonctionnent mieux quand vous avez besoin de plusieurs graisses ou d’animations fluides

Choisissez WOFF2 et Éliminez les Formats Obsolètes

Arrêtez d’expédier plusieurs formats de polices. WOFF2 offre 30% de compression en plus que WOFF et bénéficie d’un support navigateur universel. À moins de supporter IE11, WOFF2 est tout ce dont vous avez besoin.

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap;
}

Servir TTF, OTF ou WOFF aux côtés de WOFF2 gaspille la bande passante. Chaque visiteur paie une taxe de performance pour des navigateurs qui n’existent pratiquement plus. Convertissez vos polices existantes avec FontSquirrel ou CloudConvert.

Contrôlez le Rendu avec font-display

Le descripteur font-display détermine comment les navigateurs gèrent l’écart entre la requête de police et le rendu :

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap; /* Affiche immédiatement la police de secours */
}

Vos options :

  • swap : Affiche immédiatement le texte de secours, bascule quand prêt (empêche FOIT)
  • fallback : Brève période invisible (~100ms), puis police de secours
  • optional : Utilise la police seulement si disponible immédiatement
  • block : Cache le texte jusqu’à 3 secondes (à éviter)

Pour le texte de corps, utilisez swap. Pour les polices décoratives, considérez optional. Cette seule ligne peut éliminer le problème de texte invisible.

Implémentez une Subdivision Intelligente des Polices

La plupart des sites expédient des jeux de caractères complets qu’ils n’utiliseront jamais. Une police Latin Extended complète peut dépasser 100KB, alors que votre site anglais pourrait n’avoir besoin que de 30KB de glyphes.

Utilisez unicode-range pour diviser les polices par script :

/* Latin */
@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153;
}

/* Latin Extended */
@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF;
}

Des outils comme Glyphhanger analysent votre contenu et génèrent des subdivisions optimales. Pour Google Fonts, google-webfonts-helper fournit des fichiers pré-subdivisés.

Concevez des Piles de Polices Système Robustes

Les polices système se chargent instantanément et fournissent d’excellentes solutions de secours. Une pile bien conçue assure un texte lisible même si les polices personnalisées échouent :

body {
  font-family: Inter, -apple-system, BlinkMacSystemFont, 
               'Segoe UI', Roboto, sans-serif;
}

Faites correspondre les métriques entre les polices personnalisées et de secours en utilisant les descripteurs CSS :

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap;
  size-adjust: 100.5%; /* Faire correspondre les métriques de secours */
  ascent-override: 95%;
  descent-override: 25%;
}

Utilisez Font Style Matcher pour calculer ces valeurs et minimiser les décalages de mise en page.

Préchargez les Polices Critiques

Le préchargement indique aux navigateurs de récupérer les polices immédiatement, avant de les découvrir dans le CSS :

<link rel="preload" href="/fonts/inter-latin.woff2" 
      as="font" type="font/woff2" crossorigin>

Considérations clés :

  • Préchargez seulement les polices au-dessus de la ligne de flottaison
  • Incluez l’attribut crossorigin (requis pour les polices)
  • Faites correspondre l’URL exacte de votre déclaration @font-face
  • Évitez de précharger chaque subdivision—cela annule l’objectif de la subdivision

Combinez avec du CSS critique en ligne pour un impact maximum :

<style>
  @font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-latin.woff2') format('woff2');
    font-display: swap;
  }
</style>

Considérez les Polices Variables de Manière Stratégique

Les polices variables peuvent remplacer plusieurs fichiers par un seul, mais elles ne sont pas toujours plus petites. Une police variable supportant les graisses 100-900 pourrait faire 50KB, tandis que deux graisses statiques totalisent 30KB.

@font-face {
  font-family: 'Inter Variable';
  src: url('/fonts/inter-variable.woff2') format('woff2-variations');
  font-weight: 100 900;
  font-display: swap;
}

/* Utilisez n'importe quelle graisse dans la plage */
h1 { font-weight: 750; }
p  { font-weight: 425; }

Les polices variables excellent quand vous avez besoin de :

  • Plusieurs graisses ou largeurs
  • Animations fluides entre les graisses
  • Typographie responsive qui s’adapte à la fenêtre d’affichage

Pour les sites simples utilisant 2-3 graisses, les polices statiques performent souvent mieux.

Impact sur les Core Web Vitals

Un chargement de polices approprié améliore directement les métriques clés :

Largest Contentful Paint (LCP) : Le préchargement et font-display: swap assurent que le texte s’affiche rapidement, empêchant les retards dans la mesure LCP.

Cumulative Layout Shift (CLS) : Faire correspondre les métriques de polices et utiliser size-adjust élimine les reflux de texte saccadés quand les polices se chargent.

First Input Delay (FID) : Réduire la charge utile des polices et éviter les comportements bloquant le rendu maintient le thread principal réactif.

Conclusion

Le chargement moderne de polices ne consiste pas à choisir une stratégie parfaite—il s’agit de combiner des techniques qui fonctionnent pour vos besoins spécifiques. Commencez avec WOFF2 et font-display: swap. Ajoutez la subdivision et le préchargement pour les polices critiques. Utilisez les piles de polices système comme solutions de secours solides. Considérez les polices variables seulement quand elles fournissent des avantages clairs.

Plus important encore, mesurez l’impact. Utilisez WebPageTest ou Lighthouse pour vérifier que votre stratégie de polices améliore réellement les métriques de performance. Une belle typographie ne devrait pas se faire au détriment de l’expérience utilisateur.

FAQ

Oui, les piles de polices système offrent d'excellentes performances et un rendu natif. Les polices système modernes comme San Francisco et Segoe UI ont un aspect professionnel. Cependant, les polices personnalisées aident à établir l'identité de marque et la cohérence entre plateformes.

Utilisez la division unicode-range pour charger seulement les jeux de caractères nécessaires. Implémentez la détection de langue pour précharger les subdivisions appropriées. Considérez utiliser l'API Google Fonts qui sert automatiquement des subdivisions optimisées basées sur le contenu textuel.

L'auto-hébergement vous donne un contrôle total sur la mise en cache et élimine les requêtes tierces. Les CDN offrent une optimisation automatique et une mise en cache partagée entre sites. Auto-hébergez pour la confidentialité et la prévisibilité des performances, utilisez les CDN pour la commodité et les mises à jour automatiques.

Chaque graisse ajoute typiquement 15-30KB. Charger quatre graisses signifie 60-120KB au total. Utilisez des polices variables si vous avez besoin de plus de trois graisses, ou limitez-vous à deux graisses comme regular et bold pour des performances optimales.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay