Nouvel item dans la série "Étude de performance de V8". Le prochain exemple montre comment du code qui n'est fonctionnellement pas lié au comportement de la partie chaude d'un micro-benchmark peut en influencer la performance de manière significative. Dans l'exemple suivant, en activant la ligne en commentaire, on peut noter un gain de performance de plus de 7x. Cela ne fonctionne que lorsque la fonction f est une fermeture sur une des variables locales, peu importe laquelle.
(function () { var scale = 160000; var t = 0; var x = 1; var y;
// Uncomment the next line for a // >7x improvement in performance!!! //var f = (function () { return f; });
for (var i = 0; i < 200*scale; ++i) { y = (function (x) { return x; }); t += y(1); }
print(t/scale); })();
Mon hypothèse à ce point-ci c'est que la création de la fonction y à chaque tour de boucle peut réutiliser des éléments de la fonction f, autrement ils sont recréés à chaque tour de boucle.
Des idées pour isoler le phénomène et/ou pour l'expliquer?
Erick