我是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响应???
答案 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绑定工作负载