2017-08-24 39 views
0

我是nodeJs和Azure的初学者。Azure函数的NodeJS比本地节点慢得多jS

我想在我的程序中使用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函数,它需要超过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();

也不大尺寸JSON响应适当的Azure的功能???

回答

0

分析这样的性能问题有点困难,但这里只有很少的事情需要考虑,并且需要注意的事情很少。

冷功能VS暖功能的性能

如果功能尚未在一段时间调用或从来没有(我认为这是约10或20分钟)进入闲置状态,这意味着它被取消供应。当你下次打这个功能时,它需要从存储中加载。由于某种体系结构和某种存储类型的依赖,当前小文件的IO命中率很差。有一些工作正在进行中,以改善这一点,但是一个大的npm树会导致大于1分钟的加载时间来获取所有小js文件。如果函数是温暖然而,它应该是在毫秒范围内(或取决于你的函数是做工作,请参阅以下更多

解决方法:用它来收拾你的功能https://github.com/Azure/azure-functions-pack

消费SKU

消费SKU较慢的CPU,您缩放到很多情况下(在几百个),但每个实例都关联到一个单一的核心。这对于IO绑定操作,常规节点功能(因为它们是单线程无论如何)等都是很好的。但是,如果您的功能试图利用CPU来处理CPU绑定的工作负载,那么它不会像您期望的那样运行。

解决方法:您可以使用专用的SKU为CPU限制的工作负载

+0

感谢您的答复和有用的信息,但它似乎是在我的情况下,低性能的响应,并要求大尺寸JSON引起的。 我通过将数组作为blob二进制来解决此问题。如果req和res的JSON结构不大,性能不会那么低。 这似乎是天蓝解析请求和响应缓慢。 –