【发布时间】:2014-11-09 14:04:05
【问题描述】:
我想在控制台中查看响应 HTTP 请求所需的时间。有点像 express.js。
GET api/myurl/ 210ms 200
我运行 sails debug 但这并没有显示太多。
我正在运行节点检查器,但似乎这让我可以在运行时检查 JavaScript 对象,但不能检查这个特定的东西。
Sails 中是否有我可以启用的配置或我可以安装的 NPM 模块来找出请求和响应之间的时间?
【问题讨论】:
我想在控制台中查看响应 HTTP 请求所需的时间。有点像 express.js。
GET api/myurl/ 210ms 200
我运行 sails debug 但这并没有显示太多。
我正在运行节点检查器,但似乎这让我可以在运行时检查 JavaScript 对象,但不能检查这个特定的东西。
Sails 中是否有我可以启用的配置或我可以安装的 NPM 模块来找出请求和响应之间的时间?
【问题讨论】:
我创建了一个简化整个过程的 Sails Hook。只需使用npm install sails-hook-responsetime --save 安装它,它就会将 X-Response-Time 添加到 HTTP 和 Socket 请求中。
【讨论】:
@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);
}
一点解释:
res对象的finish事件,因为当req发出end事件时,res头部还没有设置。getHeader 更改为 get。顺便说一句,我的声誉是 0,所以我不能对 @abeja 的回答发表评论 :)
【讨论】:
如果您想测量总响应时间(包括视图生成和将数据推送到套接字),您可以使用 startRequestTimer 中间件中定义的 req._startTime 或使用response-time提供更准确结果的中间件。
这个中间件为所有 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);
}
}
}
【讨论】:
config/http.js我得到了一个带有其他中间件的顺序数组
对于更通用的统计解决方案(也可以在您的 Sails.js 项目中使用),有一系列关于 digitalocean 的关于使用 StatsD 和 Graphite 测量服务器上的任何东西(和所有东西)的教程: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 中间件完全兼容)
我计划在投入生产之前很快在我的 Sails 项目中使用它,当我这样做时会更新更多细节,如果你在我做之前告诉我..
【讨论】:
除了@abeja 答案(虽然答案非常好),如果您正在寻找生产应用程序监控,您可能对New Relic 感兴趣。
该工具可帮助您测量(除其他外)响应时间、吞吐量、错误率等。
它还测量数据库性能(在我的例子中是 MongoDB)并帮助您轻松调查瓶颈。
除此之外,它还允许您从浏览器测量应用程序性能(包括连接时间、DOM 渲染时间等)
New Relic 设置非常简单 - 只需几个步骤即可运行统计数据(更多信息请点击此处:Installing and maintaining Node.js)。出于开发目的,您还可以拥有 24 小时数据保留的免费帐户。
我希望这也会有所帮助。
【讨论】: