1.为了测试async的异步性能,写了如下代码(可直接在浏览器console或node上运行)
async function maptest(item) {
console.time('x'+item);
console.log(item);
for(let i = 0; i< 100000; i++) {
let name = "test";
}
console.timeEnd('x'+item);
return 1;
}
var list = [1,2,3,4,5,6,7,8,9,0];
console.time('xall');
for(var i = 0; i < 10; i++)
{
maptest(list[i]).then();
}
console.timeEnd('xall');
输出结果为:
1
x1: 1.18212890625ms
2
x2: 0.097900390625ms
3
x3: 0.0830078125ms
4
x4: 0.078857421875ms
5
x5: 0.078857421875ms
6
x6: 0.080078125ms
7
x7: 0.080078125ms
8
x8: 0.079833984375ms
9
x9: 0.0810546875ms
0
x0: 0.0791015625ms
xall: 3.309814453125ms
1.182+0.098+0.083+0.079+0.079+0.080+0.080+0.080+0.081+0.079=1.921 < 3.3
问:从执行时间来看,总执行耗时并不是最长的一次maptest执行耗时,反而是比所有maptest函数执行时间之和还长。async不是异步执行的吗,此处为何体现不出async的异步性能?另外,为什么x1的执行时间远远大于其他时间?
JS线程始终只有一个。xall也不是执行的时间,只是返回的时间。
你试试在maptest开头加一行
await null
会怎样