Utilisation du 'tachometer' de Google pour mesurer les changements de performance JS dans Discourse

Lorsque vous travaillez sur du code côté client dans le cœur de Discourse, les plugins ou les thèmes, il est important de considérer l’impact sur les performances. Le projet ‘Tachometer’ de Google fournit un outil d’étalonnage statistiquement rigoureux que nous pouvons utiliser pour mesurer de manière définitive l’effet des changements.

Essentiellement, cet outil prend une liste d’URL et les charge de manière ‘rondes-points’ (round-robin). Pour chaque chargement de page, il prend une mesure de performance. Après des centaines/milliers d’itérations, il produit un tableau comparatif.

La beauté de cette approche ‘rondes-points’ est qu’elle aide à réduire l’impact des facteurs externes sur les mesures.

Étape 1 : Ajouter performance.measure()

L’approche ici variera en fonction de ce que vous testez. Mais fondamentalement : vous devez introduire une valeur performance.measure() pour que Tachometer puisse la lire.

Si vous souhaitez mesurer le temps qu’il faut à Discourse pour démarrer et se rendre, vous pouvez utiliser la mesure intégrée "discourse-init-to-paint". Pour tout le reste, vous pouvez introduire votre propre performance.measure et l’utiliser.

Vous pouvez vérifier que cela fonctionne en utilisant l’onglet performance dans les outils de développement de votre navigateur :

Si vous essayez de mesurer une activité qui nécessite une interaction utilisateur (par exemple, ouvrir un menu), vous pourriez y parvenir en ajoutant quelque chose comme ceci dans un initialisateur pour cliquer sur le bouton 1 seconde après le chargement de la page :

setTimeout(() => document.querySelector(".my-button").click(), 1000);

Étape 2 : Identifier les URL à tester

Tout d’abord, assurez-vous de compiler les actifs Ember en mode production. Ceci peut être réalisé en lançant le serveur avec EMBER_ENV=production.

Pour obtenir deux URL différentes, il existe deux approches principales :

Si votre changement est suffisamment petit pour être facilement contrôlé par un feature flag, vous pourriez ajouter une logique pour le basculer en fonction d’un paramètre de requête d’URL. Vos deux URL pourraient alors être

http://localhost:4200?flag=before
http://localhost:4200?flag=after

Si le changement est trop important pour cela, vous pourriez cloner Discourse dans un deuxième répertoire et lancer une deuxième copie d’ember-cli. Elle peut être redirigée vers le même serveur Rails en utilisant une commande comme

EMBER_ENV=production pnpm ember serve --port 4201 --proxy http://localhost:3000

Et ensuite, vos deux URL seraient

http://localhost:4200
http://localhost:4201

Si vous choisissez cette approche, assurez-vous que les deux copies de l’application ont la télémétrie de performance que vous avez introduite à l’étape 1 de ce guide

Étape 3 : Configurer Tachometer

Voici mon fichier bench.json, qui prendra 300 échantillons de chaque cible :

{
  "timeout": 5,
  "sampleSize": 300,
  "benchmarks": [
    {
      "measurement": {
        "mode": "performance",
        "entryName": "discourse-init-to-paint"
      },
      "expand": [
        {
          "url": "http://localhost:4200",
          "name": "before"
        },
        {
          "url": "http://localhost:4201",
          "name": "after"
        }
      ]
    }
  ]
}

Étape 4 : Exécuter l’étalonnage

Pour réduire le bruit, arrêtez toute activité non liée sur votre poste de travail, puis démarrez l’étalonnage avec une commande comme :

npx tachometer@latest --config ./bench.json

Une fois terminé, vous devriez voir une comparaison des performances avant/après.

Limites

Comme pour toute expérience de ce type, il est utile de considérer les limites. Par exemple :

  • Les différences de performance sur votre poste de travail de développement ne correspondent pas directement à celles d’autres navigateurs/appareils

  • Le processus de démarrage de Discourse via le proxy Ember-CLI n’est pas exactement le même qu’en production. Lors de modifications structurelles (par exemple, mises à jour de framework), cela peut être important

  • La performance varie souvent en fonction de l’état de l’application (par exemple, le nombre de sujets rendus), vos résultats pourraient donc ne pas être exactement reproductibles dans d’autres environnements


Ce document est contrôlé par version - suggérez des modifications sur github.

17 « J'aime »