js 达夫设备和其他 for 循环性能对比

2020-10-23 Jon js+jquery+ajax

for/for of 对比
let arr = [], index = 0, num = 5000000;
while(index < num) {
	arr.push(index++);
}
// for 循环
function forLoop() {
	console.time('forLoop');
	for (let i = 0, len = arr.length; i < len; i++) {
		arr[i]++;
	}
	console.timeEnd('forLoop');
}
// for of 循环
function forOfLoop() {
	console.time('forOfLoop');
	for (let e of arr) {
		e++;
	}
	console.timeEnd('forOfLoop');
}
forLoop();
forOfLoop();
/*
	num = 500
		forLoop: 0.121ms
		forOfLoop: 0.050ms
	num = 4000
		forLoop: 0.258ms
		forOfLoop: 0.254ms
	num = 50000
		forLoop: 0.262ms
		forOfLoop: 1.390ms
	num = 500000
		forLoop: 2.514ms
		forOfLoop: 16.135ms
*/
达夫设备/for 对比
// 定义一个数组
let arr = [], index = 0, num = 100000;
while(index < num) {
	arr.push(index++);
}
// 假定需要调用方法处理
let arr2 = [];
function fun(val) {
	arr2.push(val);
}
// 正常for循环
function forLoop() {
	console.time('forLoop');
	for (let i = 0, len = arr.length; i < len; i++) {
		arr[i]++;
		// 操作 push
		fun(arr[i]+1);
	}
	console.timeEnd('forLoop');
}
// 测试 达夫设备 循环性能
function dafuLoop() {
	console.time('dafuLoop');
	let len = arr.length;
	let j = len % 8;
	let t = len-1;
	while(j) {
		j--;
		// 操作 push
		fun(arr[t--]+1);
	}
	j = Math.floor(len / 8);
	while(j){
		j--;
		// 操作 push
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
		fun(arr[t--]+1);
	}
	console.timeEnd('dafuLoop');
}
forLoop();
dafuLoop();
/* 
	单纯循环 达夫 完胜 for 
		num	= 1000000
			forLoop: 3.187ms
			dafuLoop: 1.137ms
	操作 push 
		num = 10000
			forLoop: 3.150ms
			dafuLoop: 0.544ms
		num = 100000
			forLoop: 5.006ms
			dafuLoop: 8.292ms
*/
结论

for/for of循环对比结论:4000 一下 for of 快,大于 4000 for 更快
达夫设备 vs for循环
经过多次不同处理方式不同数据量的测试得出以下结论
如果进行数据处理 比如调用方法 push 两者 性能差不多
如果只是单纯循环速度,达夫设备 完胜 for循环
如果考虑代码可读性和简洁性,for 循环 更胜一筹
个人感觉 100万数据以内完全用不到达夫设备 for 循环就很快
对于更大数据的循环,如果性能要求比较高,可以考虑达夫设备

标签: js

分享这篇文章
赞助鼓励:如果觉得内容对您有所帮助,您可以支付宝(左)或微信(右):

声明:如无特殊注明,所有博客文章版权皆属于作者,转载使用时请注明出处。谢谢!

发表评论:

皖ICP备15010162号-1 ©2015-2020 知向前端
qq:1614245331 邮箱:13515678147@163.com Powered by emlog sitemap