[Actualité] [JS] Ordre d'évaluation et Performance
par
, 22/02/2015 à 10h48 (1726 Affichages)
JavaScript étant un langage interprété, l'ordre des opérations peut avoir un impact significatif sur les performances selon le navigateur.
Par exemple, les expressions a * b + c et c + a * b bien que mathématiquement équivalentes peuvent ne pas avoir le même coût computationnel. Et pour cause.
Selon que la multiplication soit en début d'expression ou bien en fin d'expression, cela peut influencer drastiquement les performances.
Sur Chrome nous n'observons pas de différences réellement significatives selon l'ordre de la multiplication par rapport à l'addition.
Cependant, sur Firefox, en plus de performances globales meilleures par rapport à Chrome, on peut constater que l'ordre d'évaluation des opérandes est très important. Du simple au double !
Dans le doute sur le navigateur qui exécutera le code, il vaut mieux donc privilégier la multiplication en début d'expression plutôt qu'en fin.
Ceci peut sans doute s'expliquer par l'ordre d'évaluation d'une expression qui doit probablement se faire de gauche à droite. Si la multiplication qui a une plus grande priorité sur l'addition se trouve en fin d'expression et donc à droite, cela doit probablement obliger l'interpréteur JavaScript de Firefox à empiler l'opérande gauche de l'addition avant de réaliser la multiplication puis de faire la somme proprement dite. Lorsque la multiplication se trouve en début d'expression et donc à gauche, cela permet à l'interpréteur de calculer la multiplication puis l'addition, sans passer par la pile. En tout cas sur Firefox.
Plus généralement, il est sans doute préférable d'écrire les expressions JavaScript dans l'ordre des priorités décroissantes. L'opérateur de plus forte priorité avant celui de plus faible priorité afin de limiter l'usage de la pile.
Chrome par contre normalise probablement l'ordre des opérations au préalable de l'évaluation arithmétique.