遭遇した問題
firebaseのcloud functionsが実行されるまでの時間が異様に長い。トリガーの条件を満たしてから、5秒前後かかってからデータに実行結果が反映されることがある。
結論
cloud functionsに一定期間のアクセスがない場合は、自動的にインスタンスがスリープモードに入る。そのために、しばらくぶりにアクセスがあると、インスタンスが起動するまでに数秒間の時間がかかる。
functionが実行される条件を満たしてから、functionを実行するためのインスタンスを立ち上げるイメージ。
取り組んでいた問題
チャットボットを作成しているときに、新しいチャットルームが作成されたら、ユーザーにメッセージを送信するプログラムを書いていた。
index.js
var functions = require('firebase-functions');
exports.didCreateMainChat = functions.database.ref('main_chat/channels/{channelId}')
.onWrite(event => {
if (!event.data.exists()) {
return;
}
var newMessageRef = event.data.ref.child('messages').push()
newMessageRef.set({
sender: "server",
message: "初めまして!"
})
})
解決策
特になし。
頻繁にリクエストが送られている場合は、今回の問題は発生しないはずなので、開発環境特有の問題である。本番環境ではインスタンスが停止することはないはずなので、大した問題にならない。
参考
http://stackoverflow.com/questions/42726870/firebase-cloud-functions-is-very-slow
このstack overflowに同様の質問が書かれていた。