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 循环就很快
对于更大数据的循环,如果性能要求比较高,可以考虑达夫设备
发表评论: