publicodes
publicodes copied to clipboard
Ajouter des benchmarks
Ajouter des scripts pour mesurer les performances du parsage et de l'évaluation sur des exemples réels. Les benchmarks n'ont pas besoin d'être lancés à chaque commit mais uniquement sur demande via un message à un bot dans une PR ou localement.
On peut s'inspirer de ce que fait TypeScript : https://github.com/microsoft/TypeScript/pull/40574#issuecomment-692908166. On voit notamment que le compilateur TypeScript est lancé sur des librairies réelles et qu'il détecte dans cet exemple une régression sur material-ui. On pourrait utiliser des benchmarks des règles de mon-entreprise / ecolab / futureco sur le futur dépôt indépendant publicodes.
J'ai commencé à travailler sur le sujet et pour l'instant je n'arrive pas à sortir un résultat plus ou moins déterministe. Je suis surpris de ne pas trouver de framework ni de bonnes pratiques pour mesurer les performances d'un calcul lourd en NodeJS.
J'ai mesuré manuellement avec l'API performance le temps de calcul d'une simulation basique (brut = 3000, calculer le net). Évidemment v8 fait tout un tas d'optimisations en cours de route et il y a une énorme variance entre chaque exécution. J'ai essayé en faisant 100 fois le calcul pour diminuer la variance mais elle reste trop grande entre chaque calcul (peut-être en faisait ×10000?).
Idée suivante faire des stats : calculer la valeur médiane et les quartiles, avec l'idée en particulier d'ignorer les valeurs extrêmes, mais je garde une grosse variance même sur ces agrégats (cf. branche benchmark
).
Dans le navigateur il est possible de ralentir virtuellement la vitesse du processeur, exemple 4× moins rapide, pour simuler un périphérique peu puissant. Je n'ai pas trouvé le moyen de faire ça en NodeJS ni le moyen d'instrumentaliser cette fonction du navigateur via pupetter.
Je vais regarder de plus près l'implémentation de l'équipe TypeScript que j'ai mentionnée dans le message ci-dessus.
Thread twitter qui confirme qu'il n'y a pas d'outil génial pour faire le benchmark d'une librairie dans l'ecosystème NodeJS https://twitter.com/Rich_Harris/status/1335782695503343616
Les benchmarks n'ont pas besoin d'être lancés à chaque commit mais uniquement sur demande via un message à un bot dans une PR ou localement.
En fait plutôt que "demander à un bot", on peut faire une règle qui lance les benchmarks et compare à master pour les PR avec l'étiquette "performance".
https://bestjs.dev/
Salesforce fait la pub pour son outils dans le thread. Les promesses sont intéressantes.
Ah oui tiens, j'étais passé à côté ! Bien vu ! Ça à l'air super !
Le support du benchmarking devrait arriver sur Deno et Vitest https://github.com/vitest-dev/vitest/issues/917
La librairie qui va être utilisée par vitest : https://github.com/tinylibs/tinybench
https://github.com/publicodes/publicodes/blob/8e4ae67b4d46a1b9c7578cd36e7c8ada5950fbe0/packages/core/bench/index.ts