Js性能優化:循環正序和倒序的性能差異,以及for和foreach的性能比較

1.正序和倒序,倒序循環是編程語言中常用的性能優化方法

通常不會感覺到性能差異,但是在數據量很大時中,比如下面的代碼:

var arr=[]
for (var i = 0; i < 1000000; i++) {
arr[i] = i;
}
var start = +new Date();
for (var j = 0; j < arr.length; j++) {
arr[j] = j;
}
console.log("for正序序循環耗時:%s ms", Date.now() - start);
var start = +new Date();
for (var j = arr.length-1; j>-1; j--) {
arr[j] = j;
}
console.log("for倒序循環耗時:%s ms", Date.now() - start); 
var start = +new Date();
arr.forEach((v,index)=>{
v=index
})
console.log("foreach循環耗時:%s ms", Date.now() - start);

經測試,

循環1萬次,輸出:

for正序序循環耗時:1 ms
for倒序循環耗時:1 ms
foreach循環耗時:1 ms

循環10萬次,輸出:

for正序序循環耗時:5 ms
for倒序循環耗時:3 ms
foreach循環耗時:2 ms

循環1百萬次,輸出:

for正序序循環耗時:20 ms
for倒序循環耗時:5 ms
foreach循環耗時:21 ms

循環1千萬次,輸出;

for正序序循環耗時:176 ms
for倒序循環耗時:25 ms
foreach循環耗時:217 ms

2.如果緩存數組長度

var arr=[]
for (var i = 0; i < 10000000; i++) {
arr[i] = i;
}
var start = +new Date();
for (var j = 0; j < length; j++) {
arr[j] = j;
}
console.log("for正序序循環耗時:%s ms", Date.now() - start);
var start = +new Date();
for (var j = length-1; j>-1; j--) {
arr[j] = j;
}
console.log("for倒序循環耗時:%s ms", Date.now() - start); 

把之前的arr.length換成length,輸出:

for正序序循環耗時:0 ms
for倒序循環耗時:0 ms

性能得到了很大提升。

總結:

1.大數據量循環,儘量用倒序排序,至於倒序爲什麼性能更好,有知道的可以留言

2.for和foreach的性能相近,在數據量很大,比如一千萬時,foreach因爲內部封裝,比for更耗時

3.減少對象成員和數組項的查找,比如緩存數組長度,避免每次查找數組 length 屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章