2014 While
est de retour
Pensez juste logique.
Regardez cette
for( var index = 0 , length = array.length ; index < length ; index++ ) {
//do stuff
}
- Besoin de créer au moins 2 variables (index,longueur)
- Besoin de vérifier si l'index est plus petite que la longueur
- Besoin d'augmentation de l'indice
- l'
for
boucle a 3 paramètres
Maintenant, dites-moi pourquoi cela devrait être plus rapide que:
var length = array.length;
while( --length ) { //or length--
//do stuff
}
- Une variable
- Aucune vérification de
- l'indice est diminué (Machines préférez)
-
while
n'a qu'un seul paramètre
J'étais totalement confus lorsque google Chrome 28 a montré que la boucle for est plus rapide que le tout.
Cela doit avoir ben une sorte de
"Euh, tout le monde est à l'aide de la boucle for, concentrons-nous sur que quand
le développement de chrome."
Mais maintenant, en 2014, la boucle while est de retour sur chrome. c'est 2 fois plus rapide , sur d'autres/les navigateurs plus anciens, il était toujours plus rapide.
Dernièrement, j'ai fait quelques tests. Maintenant, dans le monde réel envoirement ces codes ne valent rien et jsperf ne pouvez pas exécuter correctement la boucle while, car il a besoin de recréer le tableau.longueur qui prend également du temps.
vous ne POUVEZ PAS obtenir la vitesse réelle d'une boucle while sur jsperf.
vous avez besoin de créer votre propre fonction et vérifier avec window.performance.now()
Et oui... il n'y a aucun moyen de la boucle while est tout simplement plus rapide.
Le vrai problème est en fait de la manipulation du dom / temps de rendu /
le temps de dessin ou ce que vous voulez l'appeler.
Par exemple, j'ai une toile de la scène où j'ai besoin de calculer les coordonnées et les collisions... c'est fait entre 10 à 200 Microsecondes (pas de millisecondes). il prend diverses millisecondes pour rendre tout.De même que dans les DOM.
MAIS
Il y a un autre super-performant de manière à l'aide de la pour les loop
dans certains cas... par exemple, pour copier/cloner un tableau
for(
var i = array.length ;
i > 0 ;
arrayCopy[ --i ] = array[ i ] // doing stuff
);
Avis de la configuration des paramètres:
- Même que dans la boucle while, je suis à l'aide d'une seule variable
- Besoin de vérifier si l'index est plus grand que 0;
- Comme vous pouvez le voir, cette approche est différente par rapport à la normale pour la boucle à tout le monde, comme je fais les choses à l'intérieur de la 3ème paramètre et j'ai aussi diminuer directement à l'intérieur de la matrice.
Dit, cela confirme que les machines comme l' --
une écriture que je pensais à faire un peu plus court et de supprimer certains trucs inutiles et écrit en utilisant le même style:
for(
var i = array.length ;
i-- ;
arrayCopy[ i ] = array[ i ] // doing stuff
);
Même si elle est plus courte qu'elle ressemble à l'aide d' i
on plus le temps ralentit tout.
C'est 1/5 plus lente que la précédente for
boucle et de l' while
.
Remarque: l' ;
est très important après la pour looo sans {}
Même si je viens de vous dire que jsperf n'est pas le meilleur moyen de scripts de test .. j'ai ajouté ces 2 boucles ici
http://jsperf.com/caching-array-length/40
Et voici une autre réponse sur les performances en javascript
http://stackoverflow.com/a/21353032/2450730
Cette réponse est de montrer performant façons d'écrire du code javascript. Donc, si vous ne pouvez pas lire cela, demandez et vous obtiendrez une réponse ou lire un livre sur le javascript http://www.ecma-international.org/ecma-262/5.1/