如何衡量Sails.js请求/响应时间

时间:2014-09-15 23:17:19

标签: node.js sails.js

我想在控制台中看到响应HTTP请求所需的时间。有点像express.js。

GET api/myurl/ 210ms 200

我跑sails debug但这并没有显示出多少 我有节点检查器运行,但似乎这让我在运行时检查JavaScript对象,但不是这个特定的东西 是否可以启用Sails中的配置或我可以安装的NPM模块,以便在请求和响应之间找到这个时间?

5 个答案:

答案 0 :(得分:12)

如果要测量总响应时间(包括视图生成和将数据推送到套接字),可以使用 startRequestTimer 中间件中定义的 req._startTime 或使用{{3中间件可以提供更准确的结果。

此中间件为所有HTTP响应添加了 X-Response-Time 标头,因此您可以在客户端和服务器端进行检查。

module.exports.http = {
  middleware: {
    order: [
      'responseTimeLogger',
      // ...
    ],

    // Using built-in variable defined by Sails
    responseTimeLogger: function (req, res, next) {
      req.on("end", function() {
        sails.log.info('response time: ' + new Date() - req._startTime + 'ms');
      });
      next();
    },

    // Using response-time middleware
    responseTimeLogger: function (req, res, next) {
      req.on("end", function() {
        sails.log.info('response time: ' + res.getHeader('X-Response-Time'));
      });
      require('response-time')()(req, res, next);
    }
  }
}

答案 1 :(得分:6)

@ abeja的答案很棒,但有点过时了。如果有人仍在寻求答案,我会将最新版本放在下面:

// Using response-time middleware
responseTimeLogger: function(req, res, next) {
  res.on("finish", function() {
    sails.log.info("Requested :: ", req.method, req.url, res.get('X-Response-Time'));
  });
  require('response-time')()(req, res, next);
}

一点解释:

  1. 收听finishres事件的事件,因为当req发出end事件时,res标题尚未设置。
  2. 最近的Node.js将API getHeader更改为get
  3. 顺便说一句,我的声誉是0,所以我不能发表评论@ abeja的回答:)

答案 2 :(得分:3)

除了@abeja回答(虽然非常好的答案),如果您正在寻找生产应用程序监控,您可能会对New Relic感兴趣。

该工具可帮助您测量(除其他外)响应时间,吞吐量,错误率等。

New Relic Transactions

它还衡量数据库性能(在我的例子中是MongoDB)并帮助您轻松调查瓶颈。

enter image description here

最重要的是,它允许您从浏览器测量应用程序性能(包括连接时间,DOM渲染时间等)。

New Relic设置非常简单 - 只需几步即可运行您的统计信息(更多信息请访问Installing and maintaining Node.js)。出于开发目的,您还可以免费使用24小时数据保留。

我希望这也会有所帮助。

答案 3 :(得分:2)

对于更通用的统计解决方案(也可以在您的Sails.js项目中使用),有一系列关于使用StatsD和Graphite来测量服务器上任何内容(以及所有内容)的digitalocean的大量教程: https://www.digitalocean.com/community/tutorials/an-introduction-to-tracking-statistics-with-graphite-statsd-and-collectd

还有一个很好的StatsD node.js客户端名为Lynx:https://github.com/dscape/lynx以及Lynx的快速中间件来测量快速路由的计数和响应时间:https://github.com/rosskukulinski/lynx-express(Sails是完全的与Express / Connect中间件兼容)

我打算在投入生产之前尽快在我的帆上项目中使用它,在我做的时候会更新详细信息,如果你继续我之前请告诉我..

答案 4 :(得分:1)

我创建了一个Sails Hook,可以简化整个过程。只需使用npm install sails-hook-responsetime --save安装它,它就会为HTTP和Socket请求添加X-Response-Time。

https://www.npmjs.com/package/sails-hook-responsetime