简单的实际示例,了解从节点 10 到节点 12 及以上的更快的异步函数和 Promise

问题描述 投票:0回答:1

在提出问题之前,我想澄清这一点,我知道基准永远不会说明全部情况。但我的目标相对简单,我希望看到从节点 10 到节点 12(及以上)关于异步函数和 Promise 的性能改进。我只需要一个粗略的想法,看看我能得到多少改进,毕竟这就是这里所说的https://v8.dev/blog/fast-async

所以我努力寻找一个简单的代码来进行测试,然后我从https://fibjs.org/en/docs/guide/about.md.html找到了这个,这比我可以想出其他测试代码。

var count = 1000;

async function test_async(n) {
    if (n == count)
        return;
    await test_async(n + 1);
}

function test_callback(n, cb) {
    if (n == count)
        return cb();

    test_callback(n + 1, cb);
}

function test_sync(n) {
    if (n == count)
        return;
    test_sync(n + 1);
}

async function test() {
    console.time("async");
    await test_async(0);
    console.timeEnd("async");

    console.time("callback");
    test_callback(0, () => {
        console.timeEnd("callback");
    });

    console.time("sync");
    test_sync(0);
    console.timeEnd("sync");
}

test(); //actually I also add a python timeit like code to repeat the test()

多次运行此代码,我确实发现节点 12 与节点 10 相比显示出许多改进。不幸的是,我没有看到从节点 12 到节点 14 的许多改进。

我的问题是这个测试代码是否有效验证异步功能的改进?

---- 节点 16 更新 ----

nodejs.16 于 2021 年 4 月 21 日发布,但令我惊讶的是,当我在 Node 16 上运行我的脚本时,它的性能甚至比 NodeJS 12 还差!

当node16 V8升级到V8 9.0时,我认为我应该得到一些性能改进。不知道为什么

----再次更新----

如果我只运行一次测试,节点 16 确实表现最好。但如果我多次运行测试,比如 10 或 15 次,节点 16 就会变得最差。

我最初使用一些自制的

timeit
库来运行测试,以减少任何意外因素,现在我只是像下面这样运行测试。

async function test() {
    //async
    console.time('async')
    for (let index = 0; index < 15; index++) {
        await test_async(0)
    }
    console.timeEnd('async')
    //sync
    console.time('sync')
    for (let index = 0; index < 15; index++) {
        test_sync(0)
    }
    console.timeEnd('sync')
} 

节点 16 始终表现最差。

javascript node.js performance promise async-await
1个回答
0
投票

我注意到node18发布了并且V8 JavaScript引擎升级到了10.1,所以我再次进行了测试,发现node18显着改善了测试结果,几乎减少了node 14 50%的运行时间。

实际上,虽然在我最初的测试中,node 16.0比nodejs 14.15慢,但我发现node 16.14.2的表现比node 14.19.0更好。

那么另一方面我确实觉得fibjs使用的测试很好。

---更新---

请查看2023 年 Node.js 性能状态,了解 16.20.0、18.16.0 和 20.0.0 之间的详细性能比较。但它缺乏异步函数/promise 的比较。

© www.soinside.com 2019 - 2024. All rights reserved.