使用Node JS和Express JS进行HTTPS请求速度缓慢?

3

我有一个关于下面发布的代码的问题。当使用Google Chrome检查面板时,/auth请求平均显示500-800毫秒(等待TTFB)是否正常?当使用Request模块进行https请求时,我得到相同的结果。当直接在浏览器中键入https://graph.facebook.com时,平均获得60毫秒。

任何帮助都将不胜感激!

app.get('/auth', function(req, res){

res.writeHeader(200, {'Content-Type': 'application/json'});

var options = {
    host: 'graph.facebook.com',
    port: 443,
    path: '/',
    method: 'GET',
};

https.get(options, function (resp) {
    var body = '';
    resp.on('data', function (chunk) {
        body += chunk;
    });

    resp.on('end', function () {
        console.log('Request ended.');
        res.end('Done');
    });
});
});

- 时间快照 -

缓存:

  • 停滞时间:0.458毫秒
  • 请求发送时间:0.286毫秒
  • 等待时间(TTFB):782.409毫秒
  • 内容下载时间:0.994毫秒

清除浏览器数据后:

  • 停滞时间:0.695毫秒
  • DNS查找时间:15.062毫秒
  • 初始连接时间:48.599毫秒
  • SSL时间:23.922毫秒
  • 请求发送时间:0.308毫秒
  • 等待时间(TTFB):645.622毫秒
  • 内容下载时间:1.560毫秒

.. 我在node前使用了Nginx。


你能发布一下来自Google Chrome检查器的结果吗? - Nat
嗨,Nat,你想让我发布什么?所有时间和标题吗?我编辑了原始帖子以显示所有时间。 - user4047248
你最好使用Node Inspector来提供Express JS应用程序,以查看时间花费在哪里。我认为@loganfsmyth是正确的,大部分时间都花在SSL协商上。 - Nat
1个回答

7
您几乎肯定会花费大量时间打开和协商与Facebook的SSL。 您当前的设置将不得不每次向服务器发送请求时都执行此操作。 通常,您需要使用类似于https://www.npmjs.com/package/agentkeepalive这样的内容来保留预先协商的SSL套接字连接池。 浏览器会执行此操作,这就是为什么直接从浏览器到Facebook速度如此之快的原因。
在路由之外创建代理,然后在路由中,将代理作为选项对象的一部分传递。

你是对的。现在我的响应时间已经降至147毫秒。谢谢! - user4047248

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接