Server-Timing 中间件
Server-Timing 中间件会在响应头中提供性能指标。
INFO
注意:在 Cloudflare Workers 上,定时器指标可能不够精确,因为计时器仅记录最近一次 I/O 的耗时。
导入
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。详情参阅官方文档。