publicodes icon indicating copy to clipboard operation
publicodes copied to clipboard

Ajouter des benchmarks

Open mquandalle opened this issue 4 years ago • 6 comments

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.

mquandalle avatar Nov 23 '20 11:11 mquandalle

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.

mquandalle avatar Nov 26 '20 14:11 mquandalle

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".

mquandalle avatar Dec 08 '20 08:12 mquandalle

https://bestjs.dev/

Salesforce fait la pub pour son outils dans le thread. Les promesses sont intéressantes.

johangirod avatar Dec 08 '20 08:12 johangirod

Ah oui tiens, j'étais passé à côté ! Bien vu ! Ça à l'air super !

mquandalle avatar Dec 08 '20 09:12 mquandalle

Le support du benchmarking devrait arriver sur Deno et Vitest https://github.com/vitest-dev/vitest/issues/917

mquandalle avatar Mar 26 '22 08:03 mquandalle

La librairie qui va être utilisée par vitest : https://github.com/tinylibs/tinybench

mquandalle avatar Aug 24 '22 14:08 mquandalle

https://github.com/publicodes/publicodes/blob/8e4ae67b4d46a1b9c7578cd36e7c8ada5950fbe0/packages/core/bench/index.ts

mquandalle avatar Jan 17 '24 12:01 mquandalle