【问题标题】:How to measure Sails.js requests/respond time如何测量 Sails.js 请求/响应时间
【发布时间】:2014-11-09 14:04:05
【问题描述】:

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

GET api/myurl/ 210ms 200

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

【问题讨论】:

    标签: node.js sails.js


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      @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. 监听res对象的finish事件,因为当req发出end事件时,res头部还没有设置。
      2. 最近 Node.js 将 API getHeader 更改为 get

      顺便说一句,我的声誉是 0,所以我不能对 @abeja 的回答发表评论 :)

      【讨论】:

        【解决方案3】:

        如果您想测量总响应时间(包括视图生成和将数据推送到套接字),您可以使用 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我得到了一个带有其他中间件的顺序数组
        • 如果可能,响应时间记录器应位于列表顶部。
        • 我创建了一个钩子,可以添加所有需要的东西。在下面查看我的答案
        【解决方案4】:

        对于更通用的统计解决方案(也可以在您的 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 项目中使用它,当我这样做时会更新更多细节,如果你在我做之前告诉我..

        【讨论】:

        • 这似乎也很有用。所有这些工具都是免费/开源的吗?新遗物看起来很酷且易于安装,但现在 150/m 太多了。
        • Yes :) 这些工具的美妙之处在于它们是完全可定制的,它们是开源的,事实上,您(几乎)从头开始构建所有东西,比如跟踪什么以及如何跟踪它,幸运的是有 lynx-express 用于标准快递/航行路线跟踪,但您也可以添加和自定义它。我目前正在使用 newrelic 的免费版本,但我并不完全满意,一旦我有更多时间,我会寻找这个解决方案。
        • 还要记住,石墨是一个非常强大的演示引擎。
        【解决方案5】:

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

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

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

        除此之外,它还允许您从浏览器测量应用程序性能(包括连接时间、DOM 渲染时间等)

        New Relic 设置非常简单 - 只需几个步骤即可运行统计数据(更多信息请点击此处:Installing and maintaining Node.js)。出于开发目的,您还可以拥有 24 小时数据保留的免费帐户。

        我希望这也会有所帮助。

        【讨论】:

        • 感谢您的加入。我不会让它成为正确的答案,因为@abeja 的答案是我正在寻找的答案。但它是监控 nodejs 性能的一个非常重要的补充。 :)
        猜你喜欢
        • 2017-09-01
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 2013-03-18
        • 1970-01-01
        • 2018-09-23
        • 2023-03-19
        相关资源
        最近更新 更多