【宇潤平常瘋測-004】JS 遍歷數組如何快!快!快!

首先,我就是一後端全棧,對前端也只是會用罷了。閒的無聊來測測,不深究,只看表面,不喜勿噴!前端

遍歷數組在寫 JS 代碼時候必定是常常用的,那麼怎麼遍歷能達到最高效率呢,不少人必定沒有測試過!後端

測試環境:Chrome 71.0.3578.80 + F12 開發者工具數組

這次測試,我使用 6 種方法進行測試,它們分別是:2種 forforEachfor infor of以及mapdom

測試代碼

var list = [];
for(var i = 0; i < 100000; ++i)
{
	list.push(Math.random());
}

function test1(list)
{
	var s = 0;
	for(var i = 0; i < list.length; ++i)
	{
		s += i;
	}
	return s;
}

function test2(list)
{
	var s = 0;
	var count = list.length;
	for(var i = 0; i < count; ++i)
	{
		s += i;
	}
	return s;
}

function test3(list)
{
	var s = 0;
	list.forEach(function(value){
		s += value;
	});
	return s;
}

function test4(list)
{
	var s = 0;
	for(var i in list)
	{
		s += list[i];
	}
	return s;
}

function test5(list)
{
	var s = 0;
	list.map(function(value){
		s += value;
	});
	return s;
}

function test6(list)
{
	var s = 0;
	for(let value of list) {  
	   s += value;
	};
	return s;
}

console.time('list.length')
test1(list);
console.timeEnd('list.length');

console.time('count')
test2(list);
console.timeEnd('count');

console.time('forEach')
test3(list);
console.timeEnd('forEach');

console.time('for in')
test4(list);
console.timeEnd('for in');

console.time('map')
test5(list);
console.timeEnd('map');

console.time('for of')
test6(list);
console.timeEnd('for of');

測試結果

list.length: 2.52294921875ms
count: 2.19775390625ms
forEach: 3.802978515625ms
for in: 23.849853515625ms
map: 33.470947265625ms
for of: 7.194091796875ms

結論

如下結論僅供參考,僅在單純遍歷數組時有效,若是有其它需求可能不適用,請自行取捨。工具

**性能最佳:**定義一個變量,把list.count存起來,而後 < 這個變量做爲條件來循環。性能

固然,直接for循環將list.count做爲條件來循環,性能也不比上面的差多少,偷懶也是能夠用的。測試

forEachfor of 性能也還行。code

for inmap 能不用盡可能不用,性能太差了!開發

相關文章
相關標籤/搜索