2017-08-24 29 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結構不大,性能不會那麼低。 這似乎是天藍解析請求和響應緩慢。 –