You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore Cloud Functions执行耗时150-250ms是否正常?代码是否有误?

问题解答

耗时是否正常?

150-250ms的执行耗时属于Firestore触发器云函数的正常范围,原因包括:

  • 云函数存在冷启动开销:如果函数一段时间没被触发,再次执行时需要初始化运行环境,这部分时间会占很大比例;
  • Firestore操作的网络与内部处理:更新文档涉及到与Firestore服务端的网络通信、事务处理等,这些都需要额外时间,不是单纯代码逻辑的执行时长;
  • 日志输出的延迟:日志打印也会占用少量时间,尤其是对象序列化的过程。

代码存在的问题及修正

你的代码有几处明显问题,可能导致错误或不规范:

1. 错误获取文档ID

snapshot.data()返回的是文档的数据内容,不包含文档ID字段,你应该直接使用snapshot.id来获取被删除文档的ID,而不是从deletedData.id取值(如果文档本身没有存储id字段,这里会得到undefined)。

2. 错误的对象日志打印

console.log('deletedDoc' + deletedData);会将对象转换为字符串[object Object],无法查看实际数据,应该使用逗号分隔来打印完整对象。

3. 冗余的集合路径斜杠

db.collection(test-docs/).doc('user-counter');中的斜杠是多余的,Firestore会自动处理,但规范写法应该去掉末尾斜杠。

4. 缺少返回值

异步云函数需要返回一个Promise或值,否则可能导致云函数提前终止或出现运行时警告。

修正后的代码

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
const db = admin.firestore();

export const deleteTestDoc = functions.firestore
  .document('test-docs/{docId}')
  .onDelete(async (snapshot) => {
    const deletedData = snapshot.data();
    console.log('deletedDoc', deletedData); // 修正日志打印
    const docId = snapshot.id; // 修正文档ID获取方式
    if (!deletedData) {
      console.log('No data found for deleted document');
      return null;
    }
    const docTime = deletedData.time;
    const counterRef = db.collection('test-docs').doc('user-counter'); // 去掉冗余斜杠
    try {
      await counterRef.update({
        deleted: admin.firestore.FieldValue.increment(1),
        docTime: docTime,
      });
      console.log(`Transaction success! Increment field deleted for id: ${docId}`);
      return { status: 'success', docId }; // 添加返回值
    } catch (err) {
      console.log('Transaction failure:', err);
      return { status: 'error', error: err.message }; // 添加返回值
    }
  });

内容的提问来源于stack exchange,提问作者Bourbon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:22:44