Fastify 如何计算响应时间?

How Fastify caculate responseTime?

上下文:我对请求和响应时间感兴趣。

第一种知道请求何时由 Fastify 管理的方法添加一个钩子,例如

fastify.addHook('onRequest', (request, reply, done) => {
  request.onRequestTimestamp = Date.now();
  done();
});

但信息已经存在:启用 Fastify 日志

fastify = fastify({ logger: true });

我们可以看到例子

{
  "level": 30,
  "time": 1620659712059,
  "pid": 5673,
  "hostname": "myhostname",
  "reqId": "req-1",
  "res": { "statusCode": 200 },
  "responseTime": 14.528815001249313,
  "msg": "request completed"
}

所以我可以假设 Fastify 本身至少在某处存储了请求到达 HTTP 服务器的信息,但我找不到位置。

问题:

1- fastify 如何计算响应时间?

2- Fastify 是否存储(可能在请求对象中)请求时间戳?

您可以通过 reply.getResponseTime() 方法访问信息并在您的处理程序中添加 onResponse 挂钩或跟踪宏步骤

const fastify = require('fastify')({ logger: true })

fastify.get('/', (request, reply) => {
  const timeOne = reply.getResponseTime()
  setTimeout(() => {
    const timeTwo = reply.getResponseTime()
    reply.send({
      timeOne, timeTwo
    })
  }, 1000)
})

fastify.listen('8080')

How fastify calculate the responseTime?

它使用私有 Symbols

隐藏 reply 对象中的值