Sommaire
- Introduction
- Pourquoi avoir choisi Astro
- Stratégie de distribution CSS : en ligne vs fichier externe
- Lors de l’intégration CSS en ligne
- Lors de l’utilisation de CSS externe
- Solution : externalisation + cache immutable
- Optimisation des polices : vérifier la distribution réelle
- Comparer distribution externe et locale
- État actuel du dépôt
- Optimisation des images : Cloudflare Images + srcset + sizes
- Transformations Cloudflare Images
- Configuration srcset et sizes
- Précision de sizes
- Amélioration du LCP : preload
- Prévention du CLS (décalage de mise en page)
- Contrôle du chargement publicitaire et analytique différée
- AdSense
- GA4
- Stratégie de cache
- Checklist d’optimisation de la performance
- Conclusion
- Série d’articles associée

Introduction
Le site officiel d’Acecore repose sur Astro 7.1.3 + UnoCSS + Cloudflare Pages. Cet article présente des réglages d’optimisation vérifiés dans le dépôt au 29 juillet 2026.
Les résultats PageSpeed Insights varient selon la date, l’appareil et le réseau. Aucun score fixe n’est donc publié : comparez les changements dans les mêmes conditions avec les Core Web Vitals et le volume transféré.
Pourquoi avoir choisi Astro
Astro prend en charge la génération statique (SSG) et permet d’ajouter du JavaScript client uniquement là où il est nécessaire. Le site actuel distribue aussi des scripts ClientRouter, de recherche, de publicité et d’analytics : il faut donc mesurer le volume livré et les métriques de rendu plutôt que supposer une page sans JavaScript.
Le site utilise UnoCSS avec presetWind3(). Il génère le CSS à partir des utilitaires détectés au build, ce qui peut réduire le volume livré sans prouver qu’il s’agit du plus petit résultat possible. Inspectez le CSS généré et les classes réellement utilisées.
Stratégie de distribution CSS : en ligne vs fichier externe
La distribution CSS influe sur la taille du HTML, les requêtes supplémentaires et le cache du navigateur.
Lors de l’intégration CSS en ligne
Avec le paramètre build.inlineStylesheets: 'always' d’Astro, tout le CSS est intégré dans le HTML. Cela supprime les requêtes CSS externes et peut améliorer le FCP (First Contentful Paint) selon la page.
Les conditions favorables dépendent du volume de CSS et de la page ; un seuil fixe ne suffit pas.
Lors de l’utilisation de CSS externe
Les fichiers externes permettent de réutiliser le CSS partagé et hashé grâce au cache du navigateur.
Le site actuel utilise build.inlineStylesheets: 'auto' et vérifie la sortie générée lors des ajustements.
Solution : externalisation + cache immutable
Changez le paramètre d’Astro en build.inlineStylesheets: 'auto'. Astro décide automatiquement en fonction de la taille du CSS, externalisant le CSS volumineux.
// astro.config.mjs
export default defineConfig({
build: {
inlineStylesheets: 'auto',
},
})
Les fichiers CSS externes sont générés dans le répertoire /_astro/. Configurez un cache immutable via les en-têtes de Cloudflare Pages.
/_astro/*
Cache-Control: public, max-age=31536000, immutable
Après ce changement, inspectez le HTML généré, les fichiers CSS et le comportement du cache, puis relancez PageSpeed Insights dans les mêmes conditions.
Optimisation des polices : vérifier la distribution réelle
Comparer distribution externe et locale
Les polices externes peuvent ajouter une connexion au chemin critique. La distribution locale envoie aussi du CSS et des fichiers de police depuis le site ; comparez les deux dans les mêmes conditions.
Utilisez le panneau réseau pour vérifier les requêtes, le cache et le volume transféré, puis Rendered Fonts pour voir les polices réellement utilisées.
État actuel du dépôt
package.json contient @fontsource/noto-sans-jp, mais au 29 juillet 2026 aucun fichier sous src ne l’importe. La seule présence d’une dépendance ne prouve pas que la police est distribuée.
La pile de polices UnoCSS actuelle est :
// uno.config.ts
theme: {
fontFamily: {
sans: "'Noto Sans JP', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Yu Gothic UI', 'Yu Gothic', 'Meiryo', system-ui, sans-serif",
},
}
Cette déclaration seule ne télécharge aucune police web. Si l’auto-hébergement est adopté, vérifiez ensemble l’import explicite, le CSS et les fichiers générés, puis le rendu.
Optimisation des images : Cloudflare Images + srcset + sizes
Transformations Cloudflare Images
L’utilitaire actuel envoie uniquement les images externes vers la transformation /cdn-cgi/image/ de Cloudflare Images. Les fichiers root-relative /uploads/... et les images gérées sous asv.acecore.net/uploads/... sont servis directement.
- Conversion de format :
output=autopour la sélection automatique AVIF / WebP selon le navigateur - Ajustement de qualité : l’utilitaire actuel utilise
quality=75par défaut ; vérifiez l’image réelle avant de le modifier - Redimensionnement : paramètre
w=pour redimensionner à la largeur spécifiée
Configuration srcset et sizes
Pour les images externes distribuées en responsive, générez srcset et définissez sizes avec l’utilitaire.
---
import { generateSrcSet, optimizeImage } from '../utils/image'
const remoteImage =
'https://images.unsplash.com/photo-1515879218367-8466d910aaa4?w=800&h=400&fit=crop'
---
<img
src={optimizeImage(remoteImage, { width: 800, height: 400, quality: 75 })}
srcset={generateSrcSet(remoteImage, [480, 640, 960, 1280, 1600], {
quality: 75,
aspectRatio: 2,
})}
sizes="(max-width: 768px) calc(100vw - 2rem), 800px"
width="800"
height="400"
loading="lazy"
decoding="async"
/>
Précision de sizes
Si l’attribut sizes reste à 100vw (largeur totale de l’écran), le navigateur sélectionne une image plus grande que nécessaire. Spécifiez selon la mise en page réelle : calc(100vw - 2rem) ou (max-width: 768px) 100vw, 50vw.
Amélioration du LCP : preload
Préchargez uniquement l’image réellement candidate au LCP. Pour une image responsive, alignez les valeurs href, imagesrcset et imagesizes du layout sur l’image et définissez fetchpriority="high". Des préchargements supplémentaires peuvent entrer en concurrence : confirmez le choix par la mesure.
<link
rel="preload"
as="image"
href="..."
imagesrcset="..."
imagesizes="(max-width: 768px) calc(100vw - 2rem), 800px"
fetchpriority="high"
/>
Prévention du CLS (décalage de mise en page)
Indiquez des valeurs width et height précises dont le rapport correspond à l’image source. Des valeurs correctes permettent de réserver l’espace, mais les attributs seuls ne garantissent pas la suppression du CLS. Les chemins hero et de réécriture Markdown actuels ajoutent aussi des dimensions fixes : vérifiez leur rapport pour chaque source et mesurez le CLS.
Les images souvent oubliées sont les avatars (32×32, 48×48, 64×64px) et les miniatures YouTube (480×360px).
Contrôle du chargement publicitaire et analytique différée
AdSense
Le runtime actuel, actif sur les pages japonaises /blog/, enregistre IntersectionObserver (rootMargin: 200px) et ResizeObserver pour chaque emplacement, vérifie son affichabilité, puis exécute un premier attemptInit(). Ce premier essai n’attend pas l’intersection : un emplacement de largeur exploitable peut donc demander une publicité immédiatement. Les observers servent aux reprises lors d’une intersection ou d’un changement de taille. Les URL traduites préfixées par une locale reçoivent des emplacements, mais ne chargent pas actuellement ce runtime.
const retry = () => void attemptInit()
const intersectionObserver = new IntersectionObserver(
(entries) => {
if (entries.some((entry) => entry.isIntersecting)) {
retry()
}
},
{ rootMargin: '200px' },
)
const resizeObserver = new ResizeObserver(retry)
intersectionObserver.observe(container)
resizeObserver.observe(container)
void attemptInit() // le premier essai n'attend pas l'intersection
attemptInit() vérifie largeur et visibilité ; les attributs d’état évitent les requêtes en double.
GA4
Google Analytics 4 est planifié par pointerdown, keydown, touchstart ou scroll. Il utilise requestIdleCallback quand il est disponible et setTimeout sinon ; sans interaction, un timer le planifie après 12 secondes sur l’accueil ou 4 secondes sur les autres pages.
Stratégie de cache
Le bloc suivant documente les réglages actuels du fichier _headers de Cloudflare Pages. Ces valeurs ne constituent pas une recommandation générale pour tous les fichiers.
# Sortie de build (noms de fichiers avec hash)
/_astro/*
Cache-Control: public, max-age=31536000, immutable
# Index de recherche
/pagefind/*
Cache-Control: public, max-age=604800, stale-while-revalidate=86400
# HTML
/*
Cache-Control: public, max-age=0, must-revalidate
/_astro/*contient un hash dans le nom de fichier, un cache immutable d’un an est donc sûr/pagefind/*: actuellement une semaine de cache + un jour de stale-while-revalidate. Commepagefind-entry.json, au nom fixe, référence des métadonnées hashées, revalidez les fichiers entry/bootstrap pour éviter de mélanger les générations et réservez le cache long aux chunks hashés- HTML :
max-age=0, must-revalidate, avec revalidation avant de réutiliser le cache
Checklist d’optimisation de la performance
- La stratégie de distribution CSS est-elle appropriée : vérifier la sortie de
autoet mesurer dans les mêmes conditions - La distribution des polices a-t-elle été comparée : mesurer auto-hébergement et CDN externe dans les mêmes conditions
- La distribution réelle a-t-elle été vérifiée : contrôler les requêtes réseau et Rendered Fonts
- Les images distribuées en responsive ont-elles srcset + sizes : prévoir des tailles mobiles petites
- Seul le véritable candidat LCP est-il préchargé : aligner srcset, sizes et priorité responsive
- Les width / height sont-ils exacts : faire correspondre le rapport source et mesurer le CLS
- Le contrôle AdSense/GA4 est-il adapté : vérifier premier essai et reprises AdSense, interactions et timer de secours GA4
- Les en-têtes de cache sont-ils configurés : limiter immutable aux assets hashés
Conclusion
Le principe de l’optimisation de la performance se résume à « ne pas envoyer ce qui est inutile ». La distribution CSS doit être vérifiée sur la sortie réelle ; l’auto-hébergement est une option pour les polices lorsqu’il convient aux mesures et à l’exploitation du site.
Ne traitez pas un score fixe comme un résultat. Mesurez à nouveau les Core Web Vitals et le volume transféré dans des conditions constantes, y compris le comportement des publicités et d’Analytics.
Série d’articles associée
Cet article fait partie de la série « Guide d’amélioration de la qualité d’un site Astro ». Les améliorations du SEO, de l’accessibilité et de l’UX sont présentées dans des articles dédiés.
Processus d'optimisation
Stratégie de distribution CSS
Comprendre le compromis entre intégration en ligne et fichier externe.
Optimisation des polices
Vérifier quelles polices sont chargées et utilisées au rendu.
Optimisation des images
Optimiser les images externes avec Cloudflare Images + srcset + sizes.
Contrôle du chargement
Vérifier la tentative initiale et les reprises AdSense, ainsi que le chargement différé de GA4.
Avant optimisation
- Connexions des polices et rendu réel non vérifiés
- Sortie CSS et cache non vérifiés
- Images distribuées en taille fixe
- Script AdSense chargé immédiatement
- Suivi de scores fixes sans consigner les conditions de test
Après optimisation
- Requêtes et polices réellement rendues vérifiées
- CSS volumineux externalisé, assets hashés en cache immutable
- Taille adaptée à la largeur d'écran avec srcset + sizes
- AdSense vérifie l'affichabilité au premier essai puis reprend via observers ; GA4 charge après interaction ou délai
- PageSpeed Insights répété dans des conditions équivalentes
CSS en ligne ou en fichier externe, lequel est le plus rapide ?
Pourquoi Google Fonts CDN est-il lent ?
Que faire si Cloudflare Images est lent ?
Le contrôle de chargement AdSense affecte-t-il les revenus ?
Commentaires
Gui
PDG d'Acecore. Pilote les systèmes métier, le web, les bases de données et l'infrastructure, la qualité et l'adoption de l'IA, du cadrage des enjeux métier à la conception, au déploiement et à l'amélioration continue. S'appuie sur une capacité pratique en C#/.NET tout en couvrant aussi PHP/JavaScript, SQL Server/PostgreSQL/MySQL et Linux/Windows Server, afin de concevoir les besoins, les choix technologiques, les standards de qualité et les opérations de développement basées sur GitHub comme un flux cohérent. Intègre l'IA générative aux processus de développement, de vérification et d'organisation de l'information, comme une base pratique pour aider les petites équipes à livrer plus vite et plus sûrement.
Envie d'en savoir plus sur nos services ?
Nous offrons un accompagnement complet : développement de systèmes, design web, exploitation de serveurs et design graphique.
Articles connexes
Guide d'amélioration de la qualité d'un site Astro, suite - Ajustements finaux pour atteindre 100 sur tous les critères de PageSpeed Insights29 mars 2026 à 02:30
Guide d'amélioration de la qualité d'un site Astro — Jusqu'au score PageSpeed mobile de 9925 mars 2026
Concevoir un site Astro + Cloudflare qui grandit fonctionnalité par fonctionnalité7 juin 2026 à 19:00
Ajouter des commentaires à un blog Astro avec Cloudflare uniquement7 juin 2026 à 18:00