DialogFlow完整HTTP请求的时间响应较慢

时间:2018-09-28 19:43:26

标签: dialogflow actions-on-google

我正在为DialogFlow上的Google Assistant开发一个应用程序。 出于某种目的,我有一个必须执行http请求的功能。

代码如下:

const syncrequest = require('sync-request');

console.log('Request start');

var res = syncrequest('GET', urlRequest, {
  json: {},
});

console.log('Request end');

测试我正在使用的网址大约需要0.103秒才能响应。 但是查看firebase日志,就像这样:

3:01:58.555 PM dialogflowFirebaseFulfillment请求结束

3:01:56.585 PM dialogflowFirebaseFulfillment请求开始

即使我的服务器在0.103秒内响应,该请求也需要2秒才能处理。 有时需要4秒钟以上的时间,这会使我的应用崩溃。 有谁知道为什么要花这么长时间?我可以做些什么来更快地执行请求?

预先感谢

1 个答案:

答案 0 :(得分:1)

我对sync-request package并没有太认真,但是我确实在npm页面上看到了这个警告:

  

您不应该在生产应用程序中使用它。在node.js中   应用程序,您将发现您完全无法扩展自己的规模   服务器。在客户端应用程序中,您会发现同步请求的原因   要挂起/冻结的应用程序。同步Web请求是第一   浏览器崩溃的原因。对于生产应用,您应该使用   然后请求,除了它是   异步。

基于此,以及页面上的一些其他信息,听起来这个程序包的性能很差,并且可能严重无效地处理了同步操作。

您可能希望像建议的那样切换到then-request软件包,但是处理HTTP调用的最常见方法是使用request-promise-native,在其中您应执行以下操作:

const rp = require('request-promise-native');

return rp.get(url)
  .then( body => {
    // Set the Dialogflow response here
    // You didn't really show this in your code.
  });

如果您要执行异步任务,则必须从意图处理程序中返回承诺。