首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Firebase性能的云功能

用于Firebase性能的云功能
EN

Stack Overflow用户
提问于 2017-03-21 17:58:59
回答 2查看 1.8K关注 0票数 5

我正在使用Firebase的云函数来:

  1. 从api.ai接收参数
  2. 调用第三方API和
  3. 回复api.ai。

我对第三方API的调用使用请求Node.js模块,并封装在index.js中的一个函数(getInfoFromApi())中。

我遇到的问题是,次要函数调用的执行时间总是在15-20秒之间。注意:云函数本身在400 ms范围内一致地完成了它的执行。

通过将简单的注释记录到控制台,我可以看到函数何时启动、次要函数何时被调用以及它何时收到来自第三方的响应,因此我想我可以看到发生了什么。

大致上,时间安排如下:

  • 0:云函数初始化
  • 400 ms:云功能完成
  • 16S:调用getInfoFromApi()函数(!)
  • 17s:第三方API返回结果。

我的问题:

  • 是否有明显的原因延迟调用次要功能?这似乎不是由冷启动问题造成的,因为云功能很快就出现了,即使经过多次调用,延迟也是一致的。
  • “请求”节点模块的使用是否导致了问题?是否有更好的模块来创建/管理来自云函数的http请求?

您可以在这里看到一个简化的index.js要点:https://gist.github.com/anonymous/7e00420cf2623b33b80d88880be04f65

这里是Firebase控制台的一个抓取,显示了示例时间。注意:输出与上面的代码略有不同,因为我简化了上面的代码以帮助理解。

EN

回答 2

Stack Overflow用户

发布于 2017-04-13 17:38:29

getInfoFrom3rdParty()调用是一个异步事件。但是,您还没有从函数中返回承诺,因此函数不会等待异步事件的完成。

在我看来,由于您返回的是未定义的,所以函数也假设它失败并重试。在重试过程的某个时候,异步事件可能是在函数退出之前完成的(即由于竞争条件而无意中的成功)。在其他情况下,我也看到了类似的结果,即用户在其功能中不返回承诺或价值。

我无法从要点中看出你想要做什么--它似乎并没有对第三方的结果做任何事情,而且可能也不是你的用例的现实内容。但是这样的事情可能是你想要的:

代码语言:javascript
复制
exports.getInfo = functions.https.onRequest((request, response) => {
  // ....

  // NOTE THE RETURN; MOST IMPORTANT PART OF THIS SAMPLE
  return getInfoFromThirdParty(...).then(() => {
    response.writeHead(200, {"Content-Type": "application/json"});
    response.end(JSON.stringify(payload));
  }).catch(e => /* write error to response */);
});

function getInfoFrom3rdParty(food) {
  reqObj.body = '{"query": "'+food+'"}';

  return new Promise((resolve, reject) => {
       mainRequest(reqObj, function (error, response, body) {
          // ....
          if( error ) reject(error);
          else resolve(...);
          // ....
       });
  });
}
票数 1
EN

Stack Overflow用户

发布于 2018-01-19 08:47:49

根据我处理云函数的经验,一旦“执行完成”标志完成,它将导致延迟(从3s到15s)。这将阻止其余的执行,并增加您的总响应时间。

为了克服这个问题,您可以尝试对第三方调用作出承诺,一旦它完成,然后执行结束函数的"response.send()“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42934796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档