Optimisation JavaScript : boucles avant ou arrière ?
par
, 03/11/2014 à 19h46 (1699 Affichages)
Les boucles for en JavaScript sont généralement écrites ainsi :
La version incrémentale, ou avant, d'une boucle for est ce qui est de plus populaire chez les développeurs, et pas seulement en JavaScript.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (var i = 0; i < 1000; i++) { ... }
Cependant, dans les algorithmes un peu avancés, il arrive de tomber sur des boucles décrémentales, ou arrières, très "assembleur" dans l'esprit comme celle-ci :
On peut se poser la question, en plus d'une lisibilité moindre de la version boucle arrière, laquelle de ses deux versions est la plus rapide. Rien de plus simple pour répondre à cette question : www.jsperf.com
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (var i = 1000; i--;) { ... }
Comme on peut le voir ci-dessus, la version boucle avant est nettement plus rapide que la version arrière, pourtant strictement équivalente d'un point de vue logique. Et cela est d'autant plus surprenant qu'on pourrait se dire que le navigateur fait plus de travail avec la boucle avant (initialisation, comparaison puis incrémentation) qu'avec la boucle arrière (initialisation, puis un combo décrémentation-comparaison en une seule instruction i-- avec une 3e partie de la définition de la boucle qui est vide.
Toujours est-il que cette pratique de boucle décrémentale ou arrière n'est absolument pas justifiée en JavaScript et peut au contraire contribuer à rendre le code moins lisible et moins performant, ce qui va manifestement à l'encontre du but recherché, un comble !