5

Cloud Functions for Firebase を使用して、次のことを行います。

  1. api.ai からパラメーターを受け取る
  2. サードパーティの API を呼び出して、
  3. api.ai に返信します。

サードパーティ API への私の呼び出しはリクエスト Node.js モジュールgetInfoFromApi()を使用し、index.jsの関数 ( ) 内にラップされています。

私が抱えている問題は、セカンダリ関数呼び出しの実行に一貫して 15 ~ 20 秒かかることです。注: クラウド機能自体は、一貫して 400 ミリ秒の範囲で実行を完了します。

コンソールに簡単なコメントを記録することで、関数が開始されたとき、2 次関数が呼び出されたとき、およびサードパーティからの応答を受け取ったときにわかるので、何が起こっているのかがわかると思います。

大まかに、タイミングは次のようになります。

  • 0: クラウド関数が初期化されます
  • 400 ミリ秒: クラウド機能が完了する
  • 16 秒:getInfoFromApi()関数が呼び出されます (!)
  • 17 秒: サードパーティ API が結果を返す

私の質問:

  • 二次関数の呼び出しが遅れている明らかな理由はありますか? これは、コールド スタートの問題が原因ではないようです。これは、クラウド機能がすぐに有効になり、呼び出しを繰り返した後でも遅延が一貫しているためです。
  • 「リクエスト」ノード モジュールの使用が問題の原因ですか? クラウド機能からの HTTP リクエストを作成/管理するためのより良いモジュールはありますか?

ここで index.js の簡略化された Gist を確認できます: https://gist.github.com/anonymous/7e00420cf2623b33b80d88880be04f65

これは、タイミングの例を示す Firebase コンソールのグラブです。注: 理解を助けるために上記のコードを簡略化したため、出力は上記のコードとは少し異なります。 ここに画像の説明を入力

4

2 に答える 2

0

クラウド関数での私の経験から、「実行終了」フラグが完了すると、遅延が発生します (3 秒から最大 15 秒)。これにより、残りの実行がブロックされ、合計応答時間が長くなります。

これを克服するには、サードパーティの呼び出しに Promise を配置してみてください。完了したら、関数を終了する「response.send()」を実行します。

于 2018-01-19T08:47:49.130 に答える