【发布时间】:2019-08-31 13:02:13
【问题描述】:
我有三个使用console.time内置函数的基准测试(beforeBenchmark、benchmark和afterBenchmark)。
两个代码完全相同。但是,区别在于 JS Promises API 的构造。
第一个在 Promise resolve 中包含一个循环,第二个在 Promise then 中包含一个循环。
我不确定为什么第三个 console.log("after loop") 需要更长的时间才能完成,我将其设计为异步的。感谢您抽出宝贵时间阅读本文。
承诺解决
循环前
beforeBenchmark:0.836ms
循环后
基准测试后:40.987 毫秒
基准测试:41.202 毫秒
承诺然后
循环前
beforeBenchmark:1.122ms
循环后
基准测试后:2.872ms
基准测试:43.705 毫秒
我查看了 Stack Overflow,但找不到与此相关的任何答案。
第一种承诺
console.time("beforeBenchmark");
console.time("benchmark");
console.time("afterBenchmark");
console.log("before loop");
console.timeEnd("beforeBenchmark");
let i = 0;
let promise = new Promise(( resolve, reject ) =>
{
while (i < 10000000)
{
i++;
}
resolve();
}).then(() =>
{
console.timeEnd("benchmark")
});
console.log("after loop");
console.timeEnd("afterBenchmark");
结果
before loop
beforeBenchmark: 0.836ms
after loop
afterBenchmark: 40.987ms
benchmark: 41.202ms
第二类承诺
console.time("beforeBenchmark");
console.time("benchmark");
console.time("afterBenchmark");
console.log("before loop");
console.timeEnd("beforeBenchmark");
let i = 0;
let promise = Promise.resolve().then(() =>
{
while (i < 10000000)
{
i++;
}
console.timeEnd("benchmark")
});
console.log("after loop");
console.timeEnd("afterBenchmark");
结果
before loop
beforeBenchmark: 1.122ms
after loop
afterBenchmark: 2.872ms
benchmark: 43.705ms
【问题讨论】:
-
他们都在阻塞......虽然在不同的时间......但两者都绝对阻塞......尝试在浏览器中使循环更大......两者都会触发“脚本也正在占用长”消息
标签: javascript node.js asynchronous promise es6-promise