Skip to content

Server Timing Plugin ​

This plugin adds support for auditing performance bottlenecks with Server Timing API

Install with:

bash
bun add @elysiajs/server-timing
bun add @elysiajs/server-timing

Then use it:

typescript
import { Elysia } from 'elysia'
import { serverTiming } from '@elysiajs/server-timing'

new Elysia()
    .use(serverTiming())
    .get('/', () => 'hello')
    .listen(8080)
import { Elysia } from 'elysia'
import { serverTiming } from '@elysiajs/server-timing'

new Elysia()
    .use(serverTiming())
    .get('/', () => 'hello')
    .listen(8080)

Server Timing then will append header 'Server-Timing' with log duration, function name, and detail for each life-cycle function.

To inspect, open browser developer tools > Network > [Request made through Elysia server] > Timing.

Developer tools showing Server Timing screenshot

Now you can effortlessly audit the performance bottleneck of your server.

Config ​

Below is a config which is accepted by the plugin

enabled ​

@default NODE_ENV !== 'production'

Determine whether or not Server Timing should be enabled

allow ​

@default undefined

A condition whether server timing should be log

trace ​

@default undefined

Allow Server Timing to log specified life-cycle events:

Trace accepts objects of the following:

  • request: capture duration from request
  • parse: capture duration from parse
  • transform: capture duration from transform
  • beforeHandle: capture duration from beforeHandle
  • handle: capture duration from the handle
  • afterHandle: capture duration from afterHandle
  • total: capture total duration from start to finish

Pattern ​

Below you can find the common patterns to use the plugin.

Allow Condition ​

You may disable Server Timing on specific routes via allow property

ts
import { Elysia } from 'elysia'
import { serverTiming } from '@elysiajs/server-timing'

new Elysia()
    .use(
        serverTiming({
            allow: ({ request }) => {
                return new URL(request.url).pathname !== '/no-trace'
            }
        })
    )
import { Elysia } from 'elysia'
import { serverTiming } from '@elysiajs/server-timing'

new Elysia()
    .use(
        serverTiming({
            allow: ({ request }) => {
                return new URL(request.url).pathname !== '/no-trace'
            }
        })
    )