Skip to content

Server-Timing 미들웨어

Server-Timing 미들웨어는 응답 헤더에 성능 메트릭을 제공한다.

INFO

참고: Cloudflare Workers에서는 타이머가 마지막 I/O 시간만 표시하기 때문에, 타이머 메트릭이 정확하지 않을 수 있다.

Import

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이다.

선택 사항 totalDescription: boolean

전체 응답 시간에 대한 설명. 기본값은 Total Response Time이다.

옵션 autoEnd: boolean

startTime()이 요청이 끝날 때 자동으로 종료되어야 하는지 여부를 설정한다.
이 기능을 비활성화하면, 수동으로 종료하지 않은 타이머는 표시되지 않는다.

선택 사항 crossOrigin: boolean | string | (c: Context) => boolean | string

이 타이밍 헤더를 읽을 수 있는 오리진을 지정한다.

  • false일 경우, 현재 오리진에서만 읽을 수 있다.
  • true일 경우, 모든 오리진에서 읽을 수 있다.
  • 문자열일 경우, 지정된 도메인에서 읽을 수 있다. 여러 도메인을 지정할 때는 쉼표로 구분한다.

기본값은 false이다. 자세한 내용은 문서를 참고한다.

Released under the MIT License.