2017-08-24 5 views
0

Ich bin Anfänger bei NodeJs und Azure.NodeJS der Azure-Funktion ist viel langsamer als lokale KnotenJS

Ich versuche wav-encoder npm Modul in meinem Programm zu verwenden. wav-encoder

so schrieb ich Code wie unten,

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); 
}); 

es auf meinem lokalen Rechner läuft, weniger als 2 Sekunden.

aber wenn ich ähnlichen Code zu Azure Funktionen hochladen, dauert es mehr als 2 Minuten.

unten ist Code in meinen Funktionen. Es wird durch http REST-Aufruf ausgelöst.

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(); 
    }); 

}; 

Wissen Sie, wie ich die Leistung von Azure verbessern kann?


aktualisieren

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

context.done(); 

fand ich, dass diese Linie geringe Leistung Ursache.

Wenn ich große Array context.res.body geben dauert es lange Zeit, wenn ich rufe context.done();

ist nicht groß Größe json Antwort richtig für Azure Funktionen ???

Antwort

0

Es ist ein bisschen schwierig, Performance-Probleme wie diese zu analysieren, aber es gibt einige Dinge, die hier zu beachten sind, und einige Dinge, die man sich ansehen sollte.

Kalt Funktionen vs warme Funktionen Leistungsfähigkeit

, wenn die Funktion in einer Zeit lang oder nie nicht aufgerufen worden ist (ich glaube, es ist etwa 10 oder 20 Minuten) geht es im Leerlauf, dh es deprovisioniert wird. Wenn Sie diese Funktion das nächste Mal drücken, muss sie aus dem Speicher geladen werden. Aufgrund der Architektur und der Abhängigkeit von einer bestimmten Art von Speicher sind IO-Treffer für kleine Dateien derzeit schlecht. Es gibt Arbeit in Arbeit, um das zu verbessern, aber ein großer npm-Baum würde> 1 Minute Ladezeit verursachen, nur um alle kleinen js-Dateien zu holen. wenn die Funktion jedoch warm ist, sollte es in dem msec Bereich (oder in Abhängigkeit von der Arbeit Ihrer Funktion tut, siehe unten für weitere)

Umgehung: Verwenden Sie dies Ihre Funktion https://github.com/Azure/azure-functions-pack

zu packen

Langsamer CPU für den Verbrauch sku

Verbrauchs sku, werden Sie zu vielen Fällen skaliert (in den Hunderten), aber jede Instanz auf einen einzelnen Kern affinitize. Das ist gut für IO-gebundene Operationen, reguläre Knotenfunktionen (da sie sowieso single-threaded sind), usw. Aber wenn Ihre Funktion versucht, CPU für CPU-gebundene Arbeitslasten zu verwenden, wird sie nicht so funktionieren, wie Sie es erwarten.

Umgehung: Sie können dedizierten SKUs für Workloads CPU gebunden verwenden

+0

Danke für Ihre Antwort und nützliche Informationen, aber es scheint so, dass in meinem Fall, geringe Leistung für große Größe von JSON in Antwort und Anfrage verursacht wird. Ich löse dieses Problem, indem ich Arrays als Blobbinär mache. Wenn die JSON-Struktur von req und res nicht groß ist, ist die Leistung nicht so niedrig. Es scheint, als ob die Analyseanforderung und die Antwort in azure langsam ist. –

Verwandte Themen