L'impact de l'écriture de boucle for sur l'efficacité
En général, il existe deux manières d'écrire une boucle for :
Pas d'écriture Comment pour déclarer des variables : for(var i = 0;i<arr.length;i++){}
Comment déclarer des variables : for(var i = 0,len = arr.length;i < len;i++){}
En plus des boucles for, il existe aussi forEach()
, il y a aussi des articles qui disent que forEach()
est le plus efficace, et il est recommandé d'utiliser la méthode d'écriture forEach()
, alors laquelle est la plus efficace ? Faisons un test et voyons.
Plan de test
Le plan de test global est le suivant :
Créez une variable de tableau de test contenant 40 millions.
Utilisez deux méthodes d'écriture de boucle for et foreach pour parcourir cette variable de test.
Sur la même machine stable, réalisez 10 tests et faites enfin la moyenne.
Environnement de test : CPU : Inter(R) Core i5-3210M, RAM : 12GM, système : win10 (x64)
Processus de test
Création d'une variable de test
Utilisez d'abord une boucle while pour créer une variable de test. C'est très simple. comme suit :
var testArrs = [], i = 0; while(i<40000000){ testArrs.push(i); i++; }
Écrivez la fonction de test correspondante
pour mesurer et exécuter le code temporel que j'utilise <🎜. > et console.time()
pour tester. console.timeEnd()
function testForeach(testArrs){ console.time('foreach'); var newArrs = []; testArrs.forEach(function(i){ newArrs.push(i); }); console.timeEnd('foreach'); }
function testNoDeclare(testArrs){ console.time('no declare'); var newArrs = []; for(var i = 0;i<testArrs.length;i++){ newArrs.push(i); } console.timeEnd('no declare'); }
function testUseDeclare(testArrs){ console.time('use declare'); var newArrs = []; for(var i = 0,len = testArrs.length;i<len;i++){ newArrs.push(i); } console.timeEnd('use declare'); }
Exécuter la fonction de test
L'exécution de la fonction de test est très simple, il suffit d'appeler la fonctiontestForeach(testArrs); testNoDeclare(testArrs); testUseDeclare(testArrs);
Résultats du test
Après 10 tests, les résultats suivants ont été obtenusforeach | 不写声明 | 写声明 |
---|---|---|
2372.891ms | 672.530ms | 743.974ms |
2431.821ms | 710.275ms | 805.676ms |
2422.448ms | 729.287ms | 741.014ms |
2330.894ms | 730.200ms | 755.390ms |
2423.186ms | 703.255ms | 769.674ms |
2379.167ms | 689.811ms | 741.040ms |
2372.944ms | 712.103ms | 710.524ms |
2316.005ms | 726.518ms | 726.522ms |
2535.289ms | 733.826ms | 747.427ms |
2560.925ms | 793.680ms | 817.098ms |
平均值 | 平均值 | 平均值 |
2414.56ms | 720.15ms | 755.83ms |
ceci len = arr.length
a peut-être été mis en cache, cela n'a donc aucun sens pour nous de déclarer une variable len pour la stocker. arr.length
Manière spéciale d'écrire la boucle for
La syntaxe de base de la boucle for est :for (语句 1; 语句 2; 语句 3) { 被执行的代码块 }
<🎜. >
for(var i=0;i<10;i++){ console.log(i); }
for(var i=10;i--;){ console.log(i); }
Retournez au code au début de l'article
for (var i = 0, rule; rule = rules[i++];) { //do something }
for(var i = 0;i < rules.length;i++){ var rule = rules[i] }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!