创建Promise对象所需的时间

时间:2017-03-03 19:10:34

标签: javascript performance promise

似乎在调用Promise.resolve()时,此Promise对象仅创建一次并存储在堆上的某个位置,稍后再次调用Promise.resolve()时,它不需要额外的运行时间。我尝试了以下代码:

let outerStart = new Date().getTime();
Promise.resolve()
.then(() => {
    console.log(`outer check:\t${new Date().getTime() - outerStart} ms`);
})
.then(() => {
    console.log(`outer end:\t${new Date().getTime() - outerStart} ms`);
})
.then(() => {
    let innerStart = new Date().getTime();
    Promise.resolve()
    .then(() => {
        console.log(`inner check:\t${new Date().getTime() - innerStart} ms`);
    })
    .then(() => {
        console.log(`inner end:\t${new Date().getTime() - innerStart} ms`);
    });
});

控制台上的结果如下:

outer check:    16 ms
outer end:      17 ms
inner check:    0 ms
inner end:      0 ms

,这意味着第二次调用Promise.resolve()时,会立即创建新的Promise对象。有没有人发现相同的,也许有一些解释?非常感谢!

2 个答案:

答案 0 :(得分:1)

  • 都能跟得上!你得到CognitoInternalErrorException毫秒,但它不是0微秒。
  • 您可以0console.time一起使用,以微秒
  • 获取执行时间



console.timeEnd




答案 1 :(得分:0)

通过删除console.log引起的任何时序变化 - 结果完全不同



var t = (function() {
    var times = {};
    var starttime = (...names) => {
        var now = performance.now();
        names.forEach(name => times[name] = {start: now});
    }
    var endtime = name => times[name].end = performance.now();
    var showtime = () => Object.entries(times).forEach(entry => console.log(entry[0], (entry[1].end - entry[1].start) * 1e3 | 0));
    return {starttime, endtime, showtime};
}());

Promise.resolve()
.then(() => {
    t.endtime('outer_check');
})
.then(() => {
    t.endtime('outer_check_2');
})
.then(() => {
    Promise.resolve()
    .then(() => {
        t.endtime('inner_check')
    })
    .then(() => {
       t.endtime('inner_check_2');
    }).then(() => {
        t.showtime();
    });
    t.starttime('inner_check', 'inner_check_2');
});
t.starttime('outer_check', 'outer_check_2');