javascript 循環寫法性能探討

 

var a = [];
a[100000000 - 1] = 1;

var a1 = new Date().getTime();
for(let c = 0;c<100000000;c++){
	let sss={"c":c};
}
var a2 = new Date().getTime();
console.log(a2-a1);
console.log(sss);

主要三點:

1. 對於大循環,c< a.length 要替換成 常數比如 let l = a.length => c < l

2. 循環體內 一律用 let 聲明 臨時變量

3. 關於內部臨時變量,有另一種寫法是,聲明一個在循環外部,並在內部引用,測試過,還是不如 內部 let快,

但也有可能 是 chrome 對於 for循環 做了 專門的 優化,所以 還是要以 實際情況 測試一番。

下面是 幾個 測試例子,還有要注意 let 放外部 給內部引用 有時 會出錯,這種情況下 還是用var好。

var a = [];
a[10000000 - 1] = 1;
var b = [];
b[10000000 - 1] = null;

var a1 = new Date().getTime();
for(let c = 0;c<10000000;c++){
	let sss={"c":c};
	let bbb=12;
	b.push(sss);
}
var a2 = new Date().getTime();
console.log(a2-a1);





var a = [];
a[10000000 - 1] = 1;

var sss;

var a1 = new Date().getTime();
for(let c = 0;c<10000000;c++){
	sss={"c":c};
}
var a2 = new Date().getTime();
console.log(a2-a1);
console.log(sss);




var a = [];
a[10000000 - 1] = 1;


var a1 = new Date().getTime();
for(let c = 0;c<10000000;c++){
	var sss={"c":c};
}
var a2 = new Date().getTime();
console.log(a2-a1);
console.log(sss);




var a = [];
a[10000000 - 1] = 1;

var sss;

var a1 = new Date().getTime();
for(let c = 0;c<10000000;c++){
	sss={"c":c};
	console.log(sss);
}
var a2 = new Date().getTime();
console.log(a2-a1);
console.log(sss);



var a = [];
a[10000000 - 1] = 1;

let sss;

var a1 = new Date().getTime();
for(let c = 0;c<10000000;c++){
	sss={"c":c};
	console.log(sss);
}
var a2 = new Date().getTime();
console.log(a2-a1);
console.log(sss);


 

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