Skip to content

Server-Timing 中间件

Server-Timing 中间件会在响应头中提供性能指标。

INFO

注意:在 Cloudflare Workers 上,定时器指标可能不够精确,因为计时器仅记录最近一次 I/O 的耗时

导入

npm
ts
import { Hono } from 'hono'
import { timing, setMetric, startTime, endTime } from 'hono/timing'
import type { TimingVariables } from 'hono/timing'

用法

js
// 指定变量类型,以推断 `c.get('metric')`
type Variables = TimingVariables

const app = new Hono<{ Variables: Variables }>()

// 在路由上应用中间件
app.use(timing());

app.get('/', async (c) => {
  // 添加自定义指标
  setMetric(c, 'region', 'europe-west3')

  // 添加带计时的指标,单位必须为毫秒
  setMetric(c, 'custom', 23.8, 'My custom Metric')

  // 启动新的计时器
  startTime(c, 'db');
  const data = await db.findMany(...);

  // 结束计时器
  endTime(c, 'db');

  return c.json({ response: data });
});

条件启用

ts
const app = new Hono()

app.use(
  '*',
  timing({
    // c 为请求的 Context
    enabled: (c) => c.req.method === 'POST',
  })
)

效果

选项

optional total:boolean

是否展示总响应时间。默认值为 true

optional enabled:boolean | (c: Context) => boolean

是否在响应头中添加计时信息。默认值为 true

optional totalDescription:boolean

总响应时间的描述信息,默认值为 Total Response Time

optional autoEnd:boolean

是否在请求结束时自动结束通过 startTime() 开启的计时器。若设置为 false,未手动结束的计时器不会出现在结果中。

optional crossOrigin:boolean | string | (c: Context) => boolean | string

设置哪些来源可以读取该计时头:

  • 设为 false 时,仅当前来源可读。
  • 设为 true 时,所有来源可读。
  • 若为字符串,可指定域名(多个域名用逗号分隔)。

默认值为 false。详情参阅官方文档

Released under the MIT License.