gpt4 book ai didi

node.js - 云功能的执行时间激增?

转载 作者:行者123 更新时间:2023-12-05 06:59:52 31 4
gpt4 key购买 nike

我有一个非常简单的云函数,可以将单个值写入我的实时数据库。代码在这篇文章的底部。

查看日志,我发现执行时间非常不一致。这是一个屏幕截图:

enter image description here

您可以看到它低至 3 毫秒(太棒了!)和高达 579 毫秒(非常糟糕 - 我已经看到它达到 1000 毫秒)。结果是我的聊天室实现出现了非常明显的延迟,消息有时会按发送顺序乱序附加。 (即“1”“2”“3”被接收为“2”“3”“1”)

为什么执行时间变化如此之大?冷启动与热启动似乎并不适用,因为您可以看到这些调用一个接一个地直接发生。我也找不到任何记录的实时数据库写入/秒限制,这与 firestore 文档的 1 写入/秒限制不同。

代码如下:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();

const messagesRef = admin.database().ref('/messages/general');

export const sendMessageToChannel = functions.https.onCall(async (data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError(
'failed-precondition',
'User must be logged-in.'
);
}

try {
await messagesRef.push({
uid: context.auth.uid,
displayName: data.displayName,
body: data.body
});
} catch (error) {
throw new functions.https.HttpsError('aborted', error);
}
});

编辑:我见过this similar question从两年前开始,响应者表示任务本身具有可变的执行时间。

这里是这样吗?实时数据库的写入时间是否变化很大(大约 330 倍,从 3 毫秒到 1000 毫秒!)?

最佳答案

根据代码,这是很难控制的。
你在那里进行了很多步骤:\

  1. 验证用户身份
  2. 将他的消息发送到集合
  3. 试图捕捉任何可能的错误

因此您不能简单地依靠响应时间来组织消息传递顺序。
您应该在客户端设置服务器端时间戳以进行跟踪。

您可以使用以下解释的代码片段实现此目的:

try {
message.createdAt = firebase.firestore.FieldValue.serverTimestamp() // server-side timestamp
... // calls to functions
} catch(err) {
console.log("Couldn't set timestamp or send to functions")
}

通过这种方式,您可以在发送要保存的消息之前为消息设置一个服务器端时间戳,这样您的用户就可以看到消息何时被注册(时间戳)、保存(函数调用)和确认(发送时为 200)。

关于node.js - 云功能的执行时间激增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64289295/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com