Mise à jour
Mise à jour de la base de données, veuillez patienter...
Site original : le hollandais volant
Parfois il suffit d’un rien pour accélérer des scripts, et comme ça ne coûte rien et que ça peut rendre service, il faut s’en servir.
Aujourd‘hui, l’astuce est toute bête, mais je ne la voit pas tant que ça non plus, d’où mon partage.
Quand on fait une boucle (for, while…) sur un tableau ou une liste, par exemple pour trouver un élément particulier du tableau, on peut gagner beaucoup de temps en sortant du tableau une fois qu’on a trouvé le résultat.
Ainsi, au lieu de ça :
// soit $array un tableau de 1 000 éléments
for (var i=0, len=array.length; i<len ; i++) {
if (array[i] === recherche) {
console.log('élément trouvé : ' + i);
}
}
// soit $array un tableau de 1 000 éléments
for (var i=0, len=array.length; i<len ; i++) {
if (array[i] === recherche) {
console.log('élément trouvé : ' + i);
break;
}
}
break
pour sortir de la boucle for
dès qu’on a rempli la condition.while
:
// soit $array un tableau de 1 000 éléments
var flag = false, i=0;
while (array[i] && !flag) {
if (array[i] === recherche) {
console.log('élément trouvé : ' + i);
flag = true;
}
else {
i++
}
}
for
plutôt que while, mais ce dernier fonctionne aussi. En JS, il existe aussi .forEach
, .each
, for of
, for in
, tous pour leur propres application, mais on peut parfois utiliser break
aussi (même si ça dénaturerait un peu le forEach
, qui ne serait alors pas pertinent).for
les unes dans les autres. Imbriquer 2 boucles de 1 000, ça fait 1 000 000 de tests à effectuer. Si les tableaux ne sont (virtuellement) plus que de 500, alors on réduit le temps de calcul de 75 % (plus que 250 000 calculs).break
permet de sortir de la boucle. Son comportement est un peu différent du continue
que voici.continue
permet de sortir de l’itération courante dans une boucle, c’est pratique si l’on souhaite sortir de l’itération sans ajouter un if/else supplémentaire.
for(var i=0, len=array.length; i<len ; i++) {
if (array[i].birthday !== undefined) {
if (array[i].birthday === today) {
console.log('Bon anniversaire !);
}
}
}
for(var i=0, len=array.length; i<len ; i++) {
if (array[i].birthday === undefined) {
continue;
}
if (array[i].birthday === today) {
console.log('Bon anniversaire !);
}
}
if (this.eventsList[i].action == "deleteEvent") continue;
.action
if/else
pour quand je dois effectuer une action dans les deux cas. Si je n’ai qu’un seul cas à traiter, je ne prends que if
.switch
, et si j’ai n-1 cas à traiter, je mets un continue au début, plutôt qu’un if
suivi d’un gros else
return
dans une fonction (si on ignore le fait que return
renvoie un résultat en plus de terminer la fontion). Return a pour effet de terminer la fonction et renvoyer un résultat.break
termine l’exécution de la boucle entière : il permet de sortir du while ou du for ;continue
termine l’exécution de l’itération en cours : il sort du tour de boucle et passe à la suivante.