我正在为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秒钟以上的时间,这会使我的应用崩溃。 有谁知道为什么要花这么长时间?我可以做些什么来更快地执行请求?
预先感谢
答案 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.
});
如果您要执行异步任务,则必须从意图处理程序中返回承诺。