L'analytics tourne sur chacune de vos pages : son poids est donc une question légitime, et une question dont vous ne devriez pas avoir à nous croire sur parole. Cette page donne le chiffre et la méthode, pour que vous puissiez la refaire.

Le chiffre

11,7 Ko compressé en gzip, à partir de 33,8 Ko de JavaScript, mesuré contre le bundle servi pour un site en production.

Pour le refaire : récupérez le script avec Accept-Encoding: identity et compressez le résultat localement en gzip niveau 9. C'est le chiffre ci-dessous, et c'est ce qu'un navigateur télécharge une fois puis met en cache.

curl -s -H "Accept-Encoding: identity" \
  "https://t.skomi.com/s/YOUR-SITE-ID.js" | gzip -9 | wc -c

Votre bundle peut différer du nôtre, et c'est voulu. Le script est composé par site : il porte les réglages que ce site utilise réellement, et les fragments de capture dont ses produits ont besoin. Un site avec moins de choses activées reçoit un fichier plus petit. Lancez la commande ci-dessus contre votre propre identifiant de site pour obtenir votre chiffre plutôt que de vous fier à celui-ci.

Ce qu'il contient

Un fichier, qui fait tout le travail :

  • La page vue elle-même : chemin, source de renvoi, paramètres de campagne, taille d'écran.
  • L'identité, dérivée sans stockage. Rien n'est écrit sur l'appareil du visiteur : il n'y a donc pas de code de cookie, pas de plomberie de consentement, et pas de bandeau à charger avant que la mesure puisse commencer. C'est une grande partie de la raison pour laquelle le fichier est un seul fichier.
  • Session et engagement : combien de temps une page a retenu l'attention, jusqu'où elle a été lue.
  • Capture automatique : clics sortants, téléchargements, envois de formulaires et 404, pour ceux que vous avez activés.
  • Le transport : regroupement, réessai, et le chemin de masquage de page.

Il n'y a pas de framework dedans, pas de lot de polyfills, et pas de seconde requête pour un « module ». Ce qui arrive est ce qui tourne.

Comment il se charge

L'extrait est une ligne et il porte defer :

<script src="https://t.skomi.com/s/YOUR-SITE-ID.js" defer></script>

defer signifie que le navigateur continue d'analyser votre page et exécute le script une fois le document prêt. Il n'est jamais sur le chemin critique, il ne bloque pas le premier affichage, et le déplacer dans le <head> n'y change rien, car c'est l'attribut qui fait le travail, pas la position.

Rien n'est injecté dans votre mise en page. Le script n'ajoute ni éléments, ni styles, ni polices : il ne peut donc rien décaler sur la page. Quel que soit votre Cumulative Layout Shift, il n'est pas dedans.

À quelle fréquence il est récupéré

Cache-Control: public, max-age=300, stale-while-revalidate=86400
ETag: W/"…"

Cinq minutes de cache frais, puis une journée pendant laquelle une copie périmée est servie immédiatement tandis qu'une nouvelle est récupérée en arrière-plan. Un visiteur qui revient ne l'attend donc presque jamais, et une page vue répétée dans la fenêtre ne coûte rien du tout.

Cinq minutes, c'est délibérément court, et c'est le seul chiffre ici qui a l'air faux au premier regard. Le bundle est composé à partir de vos réglages : activez le suivi des liens sortants, changez une exclusion, activez un produit, et le fichier change. Un cache long voudrait dire que votre changement atteint de vrais visiteurs des heures plus tard. C'est stale-while-revalidate qui rachète la vitesse : le visiteur reçoit l'ancienne copie instantanément et la nouvelle arrive en arrière-plan.

Le fichier est haché sur son contenu : quand rien n'a changé, la réponse est validée contre l'ETag et aucun octet ne circule.

Ce qu'il coûte pendant qu'il tourne

  • Une requête pour le script, mise en cache comme ci-dessus.
  • Une petite requête par page vue.
  • Un sendBeacon quand la page est masquée, ce qui est la façon dont le temps sur la page est clôturé. Les beacons sont mis en file par le navigateur et ne retardent pas la navigation ; c'est le seul endroit où le tracker en utilise un.

Les durées sont calculées sur le serveur à partir de ces horodatages plutôt que par un chronomètre tournant dans la page : aucun intervalle ne se déclenche pendant que quelqu'un lit.

Être honnête sur la tendance

Le script faisait environ 10 Ko bruts il y a quelques mois et en fait 33,8 aujourd'hui. Il a grossi parce que l'engagement, la capture automatique et la prise en charge des applications lui ont été ajoutés. C'est un vrai compromis et il vaut mieux le dire franchement que de ne citer que le chiffre du jour : un outil qui en fait plus arrive en plus d'octets.

Si vous voulez le plus petit fichier possible, désactivez les captures automatiques que vous n'utilisez pas : le bundle est composé à partir de vos réglages, ce que vous désactivez n'est donc pas envoyé.

Nous ne publions la taille du script de personne d'autre. Une comparaison exige les deux chiffres remesurés le même jour par la même méthode, et la moitié qui appartient à quelqu'un d'autre ne peut pas être vérifiée automatiquement, ce qui en fait exactement le nombre qui vieillit en ayant l'air de faire autorité. Le nôtre est vérifié contre le fichier compilé à chaque exécution des tests. Mesurez le leur vous-même, avec la commande ci-dessus, le jour où vous avez besoin de la réponse.