JavaScript
đ§ Engine & VM JavaScript (V8 etc)
Lorsque vous serez plus Ă lâaise avec JavaScript il vous sera nĂ©cessaire dâĂ©tudier un minimum le fonctionnement des moteurs modernes comme V8, JS Core, SpiderMonkey etc (ce sont eux qui ont la responsabilitĂ© dâinterprĂ©ter et exĂ©cuter votre code JavaScript que ce soit dans Node.js ou mĂȘme dans le navigateur).
Ce nâest clairement pas un investissement Ă la portĂ©e dâun dĂ©butant mais plutĂŽt dâun dĂ©veloppeur de niveau intermĂ©diaire ou expĂ©rimentĂ© đ. Pour pouvoir mieux comprendre comment votre code sera gĂ©rĂ© et optimisĂ© il vous sera donc nĂ©cessaire dâapprendre les rouages de la machine đ.
Parmis les articles que je vous recommande trĂšs fortement de lire:
- EN [DĂ©butant] How JavaScript works: an overview of the engine, the runtime, and the call stack
- EN [DĂ©butant] https://mathiasbynens.be/notes/shapes-ics
- EN [DĂ©butant] https://mathiasbynens.be/notes/prototypes
- EN [Intermédiaire] Whats up with monomorphism
Il existe nĂ©anmoins des dizaines dâarticles tous aussi passionnants que jâai pris la peine de rassembler ici đ: https://github.com/fraxken/VM-Resources
Quelques talks en plus pour votre plus grand bonheur:
- FR Comprendre le fonctionnement dâun moteur Javascript (Adrien MARET)
- EN JavaScript engines - how do they even?
- EN The Past, Present and Future of JavaScript Engines
- EN JavaScript Engines: The Good Parts
- EN A sneak peek into super optimized code in JS frameworks
- EN Embedding V8 in the real world by Stanimira Vlaeva
- EN Parsing JavaScript - better lazy than eager?
- EN Essentials of Interpretation
đĄ La dangereuse mode des benchmarks
Je pense quâil est important dâaborder le sujet des benchmarks pendant que nous sommes dans la section engine JS. Les dĂ©veloppeurs adorent les utiliser comme argument pour justifier divers choix ou idĂ©ologies đ°âŠ
Le problĂšme câest que la plupart du temps ces benchmarks sont complĂštement ratĂ©s et/ou ne sont pas reprĂ©sentatifs dâun workload de production đ. MĂȘme sâils sont concrets il va vous falloir de lâexpĂ©rience pour en dĂ©duire des conclusions (et encore rien ne dit que le souci vous concerne par ailleurs).
Voici quelques articles pour vous Ă©veiller au sujet:
- EN Dangers of cross language benchmark games
- EN The trap of the performance sweet spot
- EN Performance tuning as the art of weather forecast
- EN The Black Cat of Microbenchmarks
- EN JavaScript MicroBenchmarks (from Benedikt Meurer)
- EN Preparing and Evaluating Benchmarks (from Rafael)
MĂȘme si cela peut paraĂźtre difficile Ă entendre, je pense quâune personne nâayant pas de solide connaissance sur le fonctionnement des moteurs JavaScript nâa pas de lĂ©gitimitĂ© Ă formuler des conclusions Ă partir des rĂ©sultats dâun benchmark đ„.
âThe hardest thing of all is to find which operation is more expensive inside the darkness of VM, especially when no operation is performed.â (Vyacheslav Egorov)
Et mĂȘme les personnes ayant beaucoup dâexpĂ©rience (dont notamment les contributeurs des moteurs eux-mĂȘmes) ont toujours le doute et prĂ©fĂšrent prendre des pincettes pour chacune de leurs conclusions đŻ. Câest vous dire la difficultĂ© de la tĂąche⊠savoir si vous allez faire for-in, for-of ou .forEach nâa pas vraiment grand intĂ©rĂȘt ici.
â đ Lâoptimisation prĂ©maturĂ©e est la racine de tous les maux (ou, du moins, la plupart dâentre eux) en programmation.â (Donald Knuth)
âŹ ïž JavaScript: đ Cours en ligne, talks et articles | âĄïž ⥠ECMAscript