J'ai une simple fonction Cloud dans Firebase qui prend JSON dans un POST http et l'enregistre dans une collection Firestore. Elle dispose de 512 Mo de mémoire.
Les performances de cette fonction cloud sont très médiocres. Si elle est exécutée en continu, l'aller-retour varie de 200 à 600 ms et si elle est exécutée rarement (toutes les 5 à 10 minutes), elle peut prendre de 4 à 10 secondes. Je comprends le problème du démarrage à froid, mais sur AWS, je n'ai jamais vu un démarrage à froid aussi lent, ni aussi fréquent.
Mon code est ci-dessous - j'apprécierais toute idée sur la manière d'accélérer les performances.
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
const express = require('express');
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// CORS Express middleware to enable CORS Requests.
const cors = require('cors');
app.use(cors({ origin: true }))
app.post('/submitResponse', (req, res) => {
console.log('/submitResponse');
if (!req.body.info)
res.status(422).send()
const payload = req.body.info;
console.log(payload);
const responses = db.collection("responses")
responses.add({
payload: payload,
timestamp: admin.firestore.FieldValue.serverTimestamp()
}).then(function(docRef) {
console.log("Response written with ID: ", docRef.id);
res.status(200).send(JSON.stringify(docRef.id))
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
});
exports.app = functions.https.onRequest(app);
1 votes
N'oubliez pas que Cloud Functions et Cloud Firestore sont tous deux en version bêta et ne donnent aucune garantie de performance. Je suis sûr que si vous comparez les performances avec Realtime Database, vous obtiendrez de meilleurs résultats.
0 votes
Merci pour votre réponse, Doug. Donc : (1) Serait-il juste de dire qu'il s'agit d'une performance normale pour la version bêta ? (2) Y a-t-il quelque chose que je fais qui provoque une lenteur anormale ? (3) Est-il possible d'influencer les démarrages à froid ?
0 votes
Je ne pense pas que vous fassiez quelque chose de mal. J'ai personnellement remarqué que le délai d'exécution est parfois rapide et parfois moins, donc je ne peux pas vraiment dire ce qui est "typique". L'équipe Firebase travaille activement sur ce sujet.
0 votes
Ok, merci Doug - j'apprécie votre réaction rapide !
21 votes
@Doug Stevenson Firestore n'est plus en version bêta, y a-t-il eu des améliorations ?
3 votes
J'ai construit un petit jeu qui utilise des fonctions cloud pour effectuer des transformations sur les données des utilisateurs, mais le temps d'exécution est abyssal. Cela enlève l'aspect "temps réel" de mon jeu.
0 votes
Je n'utilise pas Cloud Functions, mais un client Firestore/Firebase (si possible) devrait améliorer les performances... et si cela doit être Cloud Functions, on pourrait essayer d'enregistrer les temps de démarrage/progression/arrêt de script, afin de voir ce qui prend le plus de temps. il devrait probablement s'agir de
JSON.stringify({docRefId: docRef.id})
.0 votes
J'ai également rencontré le même problème avec mes fonctions Firebase Cloud. Mais ce problème est également documenté sur le site web des fonctions Cloud. Normalement, il démarre 10 secondes après l'événement. De plus, j'utilise le plan gratuit et je n'ai pas attaché ma méthode de paiement au compte Firebase. Je suppose que c'est le cas pour le plan gratuit.
2 votes
Neuf mois se sont écoulés depuis votre test. Je me demandais si vous pouviez réexécuter du code et voir si vous avez les mêmes problèmes de démarrage à froid ? Merci pour cet article.