IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Le Blog d'un Ninja codeur

Optimisation JavaScript : boucles avant ou arrière ?

Note : 2 votes pour une moyenne de 1,50.
par , 03/11/2014 à 19h46 (1669 Affichages)
Les boucles for en JavaScript sont généralement écrites ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for (var i = 0; i < 1000; i++) {
    ...
}
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.

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for (var i = 1000; i--;) {
    ...
}
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

Nom : picture - 8.png
Affichages : 184
Taille : 12,5 Ko

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 !

Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Viadeo Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Twitter Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Google Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Facebook Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Digg Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Delicious Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog MySpace Envoyer le billet « Optimisation JavaScript : boucles avant ou arrière ? » dans le blog Yahoo

Commentaires

  1. Avatar de Paleo
    • |
    • permalink
    Le problème vient de la post-décrémentation convertie en booléen. Elle oblige à utiliser deux variables. Même chose avec une post-incrémentation.

    D'une manière générale, mieux vaut toujours utiliser les pré-opérations : plus logiques et plus rapides.

    Voici une version améliorée des tests : http://jsperf.com/forward-vs-backward-loop/2