Firebase 加速云功能

Firebase 加速云功能,firebase,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Functions,Google Cloud Firestore,我有一个简单的函数,它只执行一个事务来帮助保持列表的计数 然而,我注意到,当我运行它时,执行它需要将近5秒的时间,就函数的简单程度而言,这似乎真的很慢。有什么我能做的或者更快的方法来保持计数器吗 exports.CountCommentsUp = functions.firestore.document('Groups/{groupID}/TextFeedActive/{postID}/Comments/{commentID}').onCreate(event => { // ref

我有一个简单的函数,它只执行一个事务来帮助保持列表的计数

然而,我注意到,当我运行它时,执行它需要将近5秒的时间,就函数的简单程度而言,这似乎真的很慢。有什么我能做的或者更快的方法来保持计数器吗

exports.CountCommentsUp = functions.firestore.document('Groups/{groupID}/TextFeedActive/{postID}/Comments/{commentID}').onCreate(event => {
  // ref to the parent document
  const docRef = admin.firestore().collection('Groups/' + event.params.groupID+ '/Feed/').doc(event.params.postID);

  //Along with Creating Counter, We need to create Notification REF
  return admin.firestore().runTransaction(function(transaction) {
      return transaction.get(docRef).then(function(sfDoc) {
          var newCC = sfDoc.data().CommentCount + 1;
          transaction.update(docRef, { CommentCount: newCC });
          return newCC;

      });
    })
}); 
我看了很多遍,它确实有效,只是感觉很慢。有没有其他方法可以做到这一点?为了让数据库感觉实时,最好还有更快的计数器变量

供未来读者阅读:

在这里,他们讨论了提高云功能性能的方法

从文件中引用:

明智地使用依赖关系

因为函数是无状态的,所以执行环境通常是 从头开始初始化(在所谓的冷启动期间)。什么时候 冷启动发生时,将计算函数的全局上下文

如果函数导入模块,则这些模块的加载时间 在冷启动期间增加调用延迟。你可以减少这个 延迟,以及部署功能所需的时间 正确加载依赖项而不加载依赖项 函数不使用

使用全局变量在将来的调用中重用对象

不能保证云函数的状态将是 保留以备将来调用。然而,云的功能通常是 回收以前调用的执行环境。如果你 在全局范围中声明变量,其值可以在 无需重新计算的后续调用

通过这种方式,您可以缓存在其上重新创建可能会很昂贵的对象 每个函数调用。从功能体中移动此类对象 向全球范围扩展可能会导致显著的性能改进。 以下示例仅为每个函数创建一次重对象 实例,并在到达 举个例子: 在全局范围内缓存网络连接、库引用和API客户端对象尤其重要。有关示例,请参见优化网络

执行全局变量的延迟初始化

如果在全局范围内初始化变量,则初始化代码 将始终通过冷启动调用执行,从而增加 函数的延迟。如果某些对象未在所有代码路径中使用, 考虑在需求上懒洋洋地初始化它们:

如果在一个文档中定义了多个函数,这一点尤为重要 单个文件,不同的函数使用不同的变量。除非 如果使用延迟初始化,则可能会在以下变量上浪费资源: 已初始化但从未使用

您也可以阅读由谷歌开发者拥护者撰写的文章:。 总结文章中的要点(加快云功能)

  • 修剪依赖项。
  • 使用依赖项缓存。
  • 延迟加载

什么东西需要5秒钟?是从代码开始到显示的代码结束,还是从创建文档到提交事务?输出:函数执行耗时5589毫秒,状态为“ok”@FrankvanPuffelenso是的,整体函数执行,虽然在输出后不久:函数执行花了342毫秒,但状态“ok”似乎有很多变化如果您看到342毫秒,那么代码本身显然不会导致5秒钟的延迟。第一个可能是一个冷启动,云函数正在为您的代码构建一个新的容器。如果不知道如何在本地复制,就很难更具体。