跳到主要内容
CNode

【震惊】Node爆惊天大bug,影响数千万Node.js进程!他竟然一行代码就修复了!他到底做了啥?

问答
Zzengming00发布于 9 年前最后回复 9 年前
768730

很多天前old big让我测试在async中throw和return的效率,偶然踩中了坑

async function foo() {
    throw new Error();
}
(async function test() {
    for (let i = 0; i < 100000; i++) {
        try {
            await foo();
        } catch (e) {
        }
    }
})();
console.log('done');

是什么原因呢?

下面仅仅四行代码也硬了

for (let i = 0; i < 100000; i++) {
    Promise.reject().catch(e => { });
}
console.log('done');
// 只需一行代码。node就冷静下来了
global.Promise = require('bluebird');
for (let i = 0; i < 100000; i++) {
    Promise.reject().catch(e => { });
}
console.log('done');
查看回复

回复 (7)

E
eyblog#79 年前

明天来UC震惊部上班

E
Equim-chan#69 年前

Node原生的Promise本来就有一些效率问题,之前bluebird的作者有提到过。 http://softwareengineering.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird

S
sunkuo#59 年前

楼主没有打印执行时间?

K
kyriosli#49 年前

真是头条体。。 目测是Promise实现问题,node的promise是自己实现的,用的也不是v8的Promise

D
dlyt#39 年前

哈哈

I
ImSiegeLion#29 年前

你成功通过了UC头条部的考核,请于明日到总部报道。

I
ImSiegeLion#19 年前

(¬_¬)真是学以致用

参与回复

登录后即可参与回复。登录