Hafen

13 kilo-octets : ce qu’un thème WordPress doit vraiment peser

Presque tous les thèmes se disent rapides. C’est rarement vérifiable, parce que presque personne ne donne de chiffres que l’on puisse mesurer soi-même. Voici donc les chiffres de Hafen, en octets, avec la version et la date de mesure à côté. Et la partie honnête : là où un thème léger aide vraiment, et là où il ne sauve absolument rien.

Face aux promesses de temps de chargement, il vaut la peine de se demander ce qui a été mesuré exactement. « Moins d’une seconde » dépend du serveur et du lieu de mesure. Un score Lighthouse dépend du contenu de la page de test. Ce qui, en revanche, appartient durablement au thème et ne se discute pas, c’est la quantité de CSS et de JavaScript qu’il place sur chaque page. C’est précisément ce que nous avons mesuré.

Les chiffres

Mesuré le 6 septembre 2026 dans le paquet publié de Hafen 1.0.0, c’est-à-dire la version présente dans le répertoire officiel des thèmes du 4 au 22 septembre. Le navigateur a besoin d’exactement deux fichiers pour l’affichage, tous deux servis par votre propre serveur :

FichierDans le paquetgzipBrotli
style.css28 873 octets8 671 octets7 642 octets
assets/js/hafen.js1 948 octets862 octets786 octets
Total, deux requêtes30 821 octets9 533 octets8 428 octets
inter-variable.woff2, uniquement dans le look par défaut48 256 octetswoff2 est déjà compressé

Sur le réseau passent donc 9 533 octets en deux requêtes. gzip est ici le chiffre prudent, parce que tout hébergeur le fournit ; la valeur Brotli à côté a été mesurée au niveau de compression maximal, et les serveurs qui compressent à la volée restent au quotidien un peu au-dessus. Pour que vous arriviez aux mêmes chiffres : mesuré sur le paquet hafen-1.0.0.zip avec node:zlib, gzip au niveau standard 6, Brotli au niveau 11. D’autres outils s’écartent de quelques octets ; pour le même fichier, nous avons mesuré de 9 522 à 9 555 octets selon le programme. Cela ne change rien au constat, mais bien à une comparaison de chiffres, c’est pourquoi l’outil est indiqué ici. Un troisième fichier n’apparaît volontairement pas dans le tableau : à partir de theme.json, WordPress génère les styles globaux et les écrit dans l’en-tête de la page. Ils comptent alors dans le poids transféré du document HTML et ne coûtent pas de requête propre.

Mise à jour du 25 septembre 2026 : Depuis le 22 septembre, Hafen 1.1.0 est dans le répertoire des thèmes : la version du menu, avec une nouvelle navigation mobile, un en-tête qui suit le défilement et des styles de tableau. Cela reste deux fichiers, plus la police dans le look par défaut, mais les deux fichiers ont grossi : style.css pèse désormais 38 191 octets (gzip 11 496, Brotli 10 241), assets/js/hafen.js 3 344 octets (gzip 1 491, Brotli 1 302). Sur le réseau passent ainsi 12 987 octets en deux requêtes, mesurés selon la même méthode sur les fichiers de la version 1.1.0 du répertoire des thèmes. La police reste inchangée à 48 256 octets. Le tableau ci-dessus montre l’état de la 1.0.0, pour laquelle cet article a été écrit.
Mise à jour du 7 septembre 2026 : À la parution de cet article en août figuraient ici les chiffres de Hafen 0.8.1, à savoir 20 534 octets de CSS et 1 948 octets de JavaScript. Ces chiffres bruts étaient justes, le total en dessous ne l’était pas : l’article annonçait 7 149 octets transférés, alors que la même section indiquait 6 461 octets gzip pour style.css et 870 octets pour hafen.js, soit 7 331 octets au total. Ce total était déjà mal additionné à l’époque ; nous le corrigeons ici de façon visible au lieu de le faire disparaître discrètement. Depuis, le thème a reçu 33 looks supplémentaires et le durcissement issu d’une vraie migration, c’est pourquoi le tableau ci-dessus fait foi aujourd’hui.

Ce qui s’est ajouté depuis la 0.8.1

Jusqu’à la 1.0.0, un peu plus de deux kilo-octets de plus sur le réseau, avec la 1.1.0 encore presque trois et demi de plus : qui a l’ancien chiffre en tête peut légitimement demander pour quoi. La même mesure sur toute la série de versions, à chaque fois style.css et hafen.js ensemble, à partir des paquets publiés :

VersionDans le paquetgzipVariations de style
0.8.022 227 octets7 341 octets5
0.9.126 866 octets8 614 octets5
0.10.028 084 octets8 787 octets37
1.0.030 821 octets9 533 octets38
1.1.041 535 octets12 987 octets38

Jusqu’à la 1.0.0, le plus grand saut se situait entre la 0.8.0 et la 0.9.1, et il ne contient pas un nouveau lot de fonctionnalités, mais le retour d’expérience d’une vraie migration : une grille magazine pour la page du blog, un visuel de repli soigné pour les articles sans image, des zones faciles à toucher dans la pagination. Le passage de cinq à 37 looks n’a en revanche coûté que 1 218 octets de CSS, parce qu’un look est un fichier JSON et pas une ligne de feuille de style en plus.

Et un chiffre n’a longtemps pas bougé du tout : hafen.js est resté inchangé à 1 948 octets de la 0.8.0 à la 1.0.0, dans tous les looks et toutes les versions. Ce n’est pas un hasard, mais la limite que nous nous sommes fixée. Ce que le CSS sait faire ne reçoit pas de JavaScript. Avec la 1.1.0, le fichier a grossi pour la première fois, à 3 344 octets : l’en-tête suit désormais le défilement, et le script mesure sa hauteur pour qu’un saut vers un titre n’atterrisse pas sous lui. Cela, le CSS seul ne le peut pas.

La police est l’exception, pas la règle

Le look par défaut, c’est-à-dire le réglage prévu dans theme.json, embarque Inter sous la forme d’un seul fichier de police variable, 48 256 octets pour toutes les graisses de 100 à 900. Avec Hafen 1.1.0, la part totale du thème sur une page s’élève dans ce seul cas à 61 243 octets. C’est le montant complet, rien ne s’y ajoute de l’extérieur : ni Google Fonts, ni police d’icônes, ni CDN.

Dès que vous choisissez l’un des 38 looks dans l’éditeur de site sous Styles, le fichier de police disparaît. Chacune des 38 variations remplace la police Inter prévue par défaut par une pile de polices système, sans fontFace propre, et le thème le remarque tout seul : l’indication de préchargement dans l’en-tête de la page se désactive dans ce cas, au lieu de demander 48 kilo-octets pour une police utilisée nulle part. Il reste, avec Hafen 1.1.0, les 12 987 octets de CSS et de JavaScript. Quels sont ces 38 looks et comment ils se distinguent par la couleur, la typographie, la forme et la densité, c’est expliqué dans Hafen 1.0 : un thème, 38 looks, zéro fichier de police.

Si vous voulez garder les couleurs par défaut et seulement vous débarrasser de la police, prenez la variation Launch. Elle ne change rien d’autre que la typographie : Segoe UI sous Windows, San Francisco sur les appareils Apple, Roboto sous Android. Les 37 autres looks apportent en plus leur propre palette de couleurs et leurs propres rayons d’angle, mais ne chargent pas non plus de fichier de police.

D’où vient habituellement le poids

Pour comparer, il est utile de regarder ce qu’un thème courant embarque sans que personne n’ait rien fait de travers. Un thème de page builder charge son propre framework, plus un jeu d’icônes, souvent jQuery et une bibliothèque de carrousel, la plupart du temps sur chaque page, que la page contienne un carrousel ou non. Le plus coûteux n’est même pas la taille, mais le temps que le navigateur passe à exécuter tout cela.

Nous avons un chiffre mesuré à ce sujet, mais pas pour un page builder : pour Neve, un thème considéré à juste titre comme l’un des thèmes classiques les plus rapides. Lors de la migration vers Hafen d’un site en production développé au fil des années, même jour, même méthode, extensions inchangées, le JavaScript de la page d’accueil mobile est passé de 621 à 382 kilo-octets et le First Contentful Paint de 3,9 à 1,3 seconde. La différence de 239 kilo-octets provient de la seule couche du thème, les extensions n’ont pas été touchées. La série complète de mesures sur quatre types de pages figure dans notre étude de cas sur le changement de thème. Pour un thème de page builder, nous n’avons pas de série de mesures propre, c’est pourquoi aucun chiffre ne figure ici à ce sujet.

Hafen part d’une autre direction. La mise en page, les couleurs, les espacements et la typographie se trouvent entièrement dans theme.json, et WordPress en génère lui-même le CSS nécessaire. Il n’y a pas de framework, parce qu’il n’en existe aucun que l’éditeur de blocs n’apporte pas déjà. Et il n’y a pas de JavaScript pour ce que le CSS sait faire ; les 3 344 octets du paquet de Hafen 1.1.0 gèrent l’en-tête fixe, y compris la mesure de sa hauteur pour les ancres, et l’apparition en fondu au défilement, rien de plus. En outre, deux filtres du thème veillent à ce que WordPress ne charge que le CSS des blocs réellement présents sur la page, au lieu de toute la bibliothèque de blocs.

Tout ce qui ne relève pas de l’affichage se trouve volontairement hors du thème, dans l’extension compagnon Hafen Core : données structurées, llms.txt, blocs de réponse. Ce n’est pas une lubie, mais une règle du répertoire, car les fonctionnalités doivent survivre à un changement de thème. Tout sur le thème, ses looks et l’extension compagnon se trouve sur la page de Hafen.

Et maintenant, la partie honnête

Un thème léger ne rend pas rapide un site lent. Il ne supprime qu’une cause parmi plusieurs, et le plus souvent pas la plus importante.

En pratique, trois autres postes dominent. Les images, quand elles sont téléversées en pleine résolution d’appareil photo et réduites en CSS ; une seule image de ce genre pèse plus que tout le thème. Les extensions qui chargent leurs scripts sur chaque page au lieu de là seulement où elles servent. Et l’hébergement, car aucune optimisation côté navigateur n’aide contre une réponse du serveur qui se fait attendre une seconde.

Pour accélérer un site existant, on ne commence donc pas par le thème ; ces trois postes comptent quel que soit le thème installé. Cet article répond à l’autre question : ce qu’un thème apporte quand on démarre de zéro ou qu’on en change.

Mesurez vous-même

Hafen figure dans le répertoire officiel des thèmes WordPress depuis le 4 septembre 2026, et en version 1.1.0 depuis le 22 septembre. Installez-le, ouvrez l’analyse réseau de votre navigateur et comptez combien de requêtes viennent du thème. Il y en a deux.

Hafen sur WordPress.org

Questions fréquentes

Comment vérifier les chiffres moi-même ?

Téléchargez le thème et regardez la taille des fichiers. Sur le serveur, vous mesurez le poids réellement transféré dans les outils de développement du navigateur, sous Réseau, colonne Transféré. Vous y voyez aussi combien de requêtes viennent vraiment du thème. Les chiffres de cet article proviennent du paquet de la version 1.0.0, mesuré le 6 septembre 2026, et des fichiers de la version 1.1.0, mesurés le 25 septembre 2026.

Pourquoi Hafen sert-il sa police lui-même au lieu d’utiliser Google Fonts ?

Pour deux raisons. D’abord, avec Google Fonts, des données de connexion partent chez un tiers, ce qui a plusieurs fois occupé les tribunaux en Allemagne. Ensuite, une connexion à un serveur tiers coûte aussi plus cher techniquement qu’un fichier servi par le vôtre. La question ne se pose toutefois que dans le look par défaut : chacune des 38 variations de style remplace Inter par une pile de polices système et ne charge alors aucun fichier de police.

Un autre look change-t-il le temps de chargement ?

Seulement dans un sens, vers le bas. Les 38 variations de style sont des fichiers JSON à partir desquels WordPress génère les styles globaux ; le navigateur ne charge aucun fichier supplémentaire pour cela, quel que soit le look choisi. La seule différence mesurable est la police : dans le look par défaut s’ajoutent 48 256 octets pour Inter, dans chacun des 38 looks, non.

Ai-je besoin de Hafen Core pour que le thème soit rapide ?

Non. Hafen Core est l’extension compagnon pour tout ce qui ne relève pas de l’affichage, c’est-à-dire les données structurées, llms.txt et les blocs de réponse. Elle n’est pas nécessaire pour la vitesse, le thème fonctionne entièrement sans elle. La séparation est une règle du répertoire WordPress : les fonctionnalités doivent survivre à un changement de thème et n’ont donc pas leur place dans le thème.

Un thème léger apporte-t-il quelque chose aux Core Web Vitals ?

Il aide, mais il ne décide pas. Moins de CSS et de JavaScript raccourcissent surtout le temps jusqu’à ce que la page réagisse. Le Largest Contentful Paint et la stabilité de la mise en page dépendent en revanche de vos images et du fait que des éléments bougent ou non après coup.

Passer à un thème de blocs fait-il perdre du contenu ?

Pas le contenu, il se trouve dans la base de données et y reste. Ce qu’il faut reconstruire, ce sont les mises en page qui reposaient sur les réglages propres de l’ancien thème. Un essai sur une copie n’est donc pas un excès de prudence, mais la démarche normale.

Retour au blog Un article de hafenstudios