Aller au contenu
Design system @paulperigault

Composants

Sobriété

Le poids se mesure, s’affiche et se signale. Aucun seuil ne fait échouer la CI : un seuil ne bloquerait que si je le posais moi-même. Cette règle remplace le « budget bloquant » de l’ADR-0006 (décision 5, D-106). C’est une préférence, pas une preuve.

Poids des pages et des paquets

Octets transférés après compression brotli, par type de ressource. Une page compte son HTML, ses feuilles de style, ses scripts, ses polices préchargées et ses images img ; les polices chargées à la demande ne sont pas comptées. Les chiffres se reproduisent :

npm -w @paulperigault/docs run build
npm run benchmark:weight
Poids transféré par page, brotli, mesuré le 2026-11-01
PagehtmlcssjsfontimagewasmTotalCO2e, nouveau visiteurCO2e, visiteur de retour
/4,2 Kio6,6 Kio0,8 Kio33,2 Kio0,0 Kio0,0 Kio44,9 Kio6,8 mg3,4 mg
/components/button/4,2 Kio5,5 Kio0,8 Kio33,2 Kio0,0 Kio0,0 Kio43,7 Kio6,6 mg3,3 mg
/tableau-de-bord/5,7 Kio7,9 Kio0,8 Kio33,2 Kio0,0 Kio0,0 Kio47,7 Kio7,2 mg3,6 mg
/sobriete/4,0 Kio4,6 Kio0,8 Kio33,2 Kio0,0 Kio0,0 Kio42,6 Kio6,5 mg3,2 mg

Site : 592 fichiers publiés. Le plus gros fichier est/llms-full.txt, de 324,4 Kio.

Poids des paquets publiés, mesuré le 2026-11-01
PaquetArchive npmContenu décompressé
@paulperigault/astro103,5 Kio439,5 Kio
@paulperigault/color33,1 Kio92,1 Kio
@paulperigault/create47,0 Kio134,0 Kio
@paulperigault/css4,5 Kio11,1 Kio
@paulperigault/data36,7 Kio96,4 Kio
@paulperigault/dataviz33,1 Kio99,8 Kio
@paulperigault/guards29,2 Kio88,7 Kio
@paulperigault/mcp214,3 Kio784,3 Kio
@paulperigault/tokens23,3 Kio70,0 Kio

Mobile, réseau lent, processeur bridé

Le test apps/docs/e2e/perf.spec.ts charge quatre pages sur un écran de 360 × 800, processeur ralenti ×4, « Slow 4G » (latence 150 ms, 1,6 Mbit/s). Il relève LCP, INP, CLS, le JavaScript en gzip et le nombre de fichiers de police, et les affiche dans le rapport Playwright. Les repères viennent de docs/benchmark/gap.md (LCP 2 500 ms, INP 200 ms, CLS 0,1) ; ils ne font échouer aucun test. Seul le fonctionnement est vérifié : la police du corps est préchargée et chargée.

Mesure du 2026-11-01, sur mon poste Windows avec Chromium, pour /, la page du bouton, le tableau de bord et cette page : LCP de 0,98 à 1,26 s, INP de 56 à 96 ms, CLS de 0, JavaScript de 1 005 octets en gzip, deux fichiers de police. Sur les runners de GitHub, l’INP est plus haut (D-021). Une seule série, un seul poste : ce n’est pas une distribution.

npm run e2e -- --project=chromium perf.spec.ts

Estimation du carbone

Le modèle est Sustainable Web Design, version 4 (sustainablewebdesign.org, page lue le 2026-11-01). C’est un modèle descendant : il applique au volume transféré une énergie par gigaoctet pour trois segments (centres de données, réseaux, appareils), en partie opérationnelle et en partie incorporée, avec une intensité électrique de 494 gCO2e par kWh. La somme est de 0,300 kWh par gigaoctet, soit 148,2 gCO2e par gigaoctet pour un nouveau visiteur et un hébergement non déclaré vert.

Limites : c’est une estimation, pas une mesure ; elle ne dit pas quoi optimiser. Les sources du modèle divergent, et la page du modèle donne 430 TWh d’énergie incorporée pour les appareils contre 421 TWh d’énergie totale. Une estimation d’un autre modèle (OneByte, SCI) ne se compare pas à celle-ci. Le calcul est dans tools/benchmark/carbon.mjs, testé contre le gigaoctet de référence.

Offre gratuite de Cloudflare Pages

Les limites lues dans ladocumentation : 500 builds par mois, 20 000 fichiers par site, 25 MiB par fichier. Le nombre de fichiers et le plus gros fichier sont dans le tableau ci-dessus. Le nombre de builds du mois se lit dans le compte Cloudflare : je ne l’ai pas mesuré ici.