Cloud Functionsのexportsしている関数が2回実行されている件
自分の書いたクソ遅いコードを改善するために、パフォーマンス計測して気が付いた。
「んんんん??2回実行してない?」
コード
const { performance } = require('perf_hooks'); exports.example = async (req, res) => { const startTime = performance.now() // クソ遅い関数 const endTime = performance.now(); console.log(endTime - startTime); }
コンソール出力
18682.617368996143 18471.702664002776
なんだこりゃ。 ちなみに、ブラウザにレンダリングされた結果は重複していません。
問題を簡略化するために、helloWorldで試してみます。
簡略化コード
let count = 1; exports.helloWorld = (req, res) => { console.log(count) if (count === 1) { res.send('Hello, World'); } if (count === 2) { res.send('Hello, Twice World'); } count += 1; };
コンソール出力
1 2
ブラウザ
むぅ...。
なぜか?は調査中
確信には至っていませんが、stackoverflowで見た、仕様により複数回実行されることがある、という点からきているのでは、と推測しています。
FYI, Cloud Functions might execute multiple times by design. See this code sample => https://github.com/GoogleCloudPlatform/cloud-functions-reliability-nodejs/blob/master/idempotency/index.js
ionic framework - Firebase Cloud Function executing twice when triggered over HTTP - Stack Overflow
ぜんっぜん確信してませんが...... なんで?誰か助けて。
わかったら追記します。