GAE on node.js v8の、関数の外のグローバル変数について


これの続き

GCPのCloud Functionsでは、関数の外にあるグローバル変数は、立ち上がっているプロセス内で使い回しのできる存在でした。

グローバル変数を使用して将来の呼び出しでオブジェクトを再利用する
Cloud Function の状態は、将来の呼び出しのために必ずしも保持されるわけではありません。しかし、Cloud Functions が以前の呼び出しの実行環境をリサイクルすることはよくあります。変数をグローバル スコープで宣言すると、その値は再計算せずに後続の呼び出しで再利用できるようになります。

この方法では、関数の呼び出しごとに再作成するためコストが高くなりがちなオブジェクトをキャッシュに保存できます。このようなオブジェクトを関数の本文からグローバル スコープに移動して、パフォーマンスを大幅に向上することができます。次の例では、heavy オブジェクトを関数のインスタンスにつき 1 回だけ作成し、指定されたインスタンスに到達するまですべての関数呼び出しで共有します。

グローバル変数を使用して将来の呼び出しでオブジェクトを再利用する

教えてもらった引用をペタリと。

では、おそらく同じ仕組みであろうGoogle App Engine on node.js v8 でも、グローバル変数を再利用できるんじゃないかと思い、試してみました。

制作物ッ!

ソースッ!

app.js
const express = require('express');
const app = express();

let count = 0;

app.get('/*', (req, res) => {
  count++;
  res.status(200).send(`count: ${count}`).end();
});

app.listen(process.env.PORT || 8080);

countを加算して、その結果をひたすら返すだけのプログラムッ!

動作確認ッ!

いつもより多くカウントされております。
無事に再利用することができました