Azure Function的NodeJS比本地nodeJS慢得多

时间:2017-08-24 06:51:33

标签: node.js function azure azure-functions

我是nodeJs和Azure的初学者。

我试图在我的程序中使用wav-encoder npm模块。 wav-encoder

所以我写了如下代码,

var WavEncoder = require('wav-encoder');

const whiteNoise1sec = {
    sampleRate: 40000,
    channelData: [
        new Float32Array(40000).map(() => Math.random() - 0.5),
        new Float32Array(40000).map(() => Math.random() - 0.5)
    ]
};

WavEncoder.encode(whiteNoise1sec).then((buffer)=>{
    console.log(whiteNoise1sec);
    console.log(buffer);
});

它在我的本地机器上运行,不到2秒。

但如果我将相似的代码上传到Azure Functions,则需要2分钟以上。

下面是我的函数中的代码。它由http REST调用触发。

var WavEncoder = require('wav-encoder');

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const whiteNoise1sec = {
        sampleRate: 40000,
        channelData: [
            new Float32Array(40000).map(() => Math.random() - 0.5),
            new Float32Array(40000).map(() => Math.random() - 0.5)
        ]
    };

    WavEncoder.encode(whiteNoise1sec).then((buffer)=>{
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: whiteNoise1sec
        };

        context.done();
    });

};

您知道如何提高Azure的性能吗?

更新

context.res = {
    // status: 200, /* Defaults to 200 */
    body: whiteNoise1sec
};

context.done();

我发现这条线导致性能下降。

如果我将大尺寸数组提供给context.res.body,则需要很长时间才能调用context.done();

不适用于Azure功能的大尺寸json响应???

1 个答案:

答案 0 :(得分:0)

分析这样的性能问题有点困难,但这里有很多事情需要考虑,很少有什么可看的。

冷功能与暖功能性能

如果该功能暂时没有被调用或者从未被调用过(我认为它大约需要10或20分钟),它就会闲置,这意味着它会被取消配置。下次你点击该功能时,需要从存储中加载。由于某些体系结构和某种类型的存储的依赖,目前对小文件的IO命中很糟糕。正在进行改进的工作,但是大的npm树会导致> 1分钟加载时间只是为了获取所有小js文件。如果函数是暖的,它应该在msec范围内(或取决于你的函数正在做的工作,见下面的更多

解决方法:使用此功能打包您的功能https://github.com/Azure/azure-functions-pack

消耗sku的CPU较慢

在消费sku中,您可以扩展到许多实例(数百个),但每个实例都与一个核心相关联。这对于IO绑定操作,常规节点函数(因为它们是单线程的)无关紧要等等。但是如果你的函数试图利用CPU来处理CPU绑定的工作负载,那么它将无法按预期执行。< / p>

解决方法:您可以将专用Skus用于CPU绑定工作负载