72 lines
1.8 KiB
Markdown
72 lines
1.8 KiB
Markdown
|
|
# Server Timing Plugin
|
||
|
|
This plugin adds support for auditing performance bottlenecks with Server Timing API
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
```bash
|
||
|
|
bun add @elysiajs/server-timing
|
||
|
|
```
|
||
|
|
|
||
|
|
## Basic Usage
|
||
|
|
```typescript twoslash
|
||
|
|
import { Elysia } from 'elysia'
|
||
|
|
import { serverTiming } from '@elysiajs/server-timing'
|
||
|
|
|
||
|
|
new Elysia()
|
||
|
|
.use(serverTiming())
|
||
|
|
.get('/', () => 'hello')
|
||
|
|
.listen(3000)
|
||
|
|
```
|
||
|
|
|
||
|
|
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.
|
||
|
|
|
||
|
|
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 twoslash
|
||
|
|
import { Elysia } from 'elysia'
|
||
|
|
import { serverTiming } from '@elysiajs/server-timing'
|
||
|
|
|
||
|
|
new Elysia()
|
||
|
|
.use(
|
||
|
|
serverTiming({
|
||
|
|
allow: ({ request }) => {
|
||
|
|
return new URL(request.url).pathname !== '/no-trace'
|
||
|
|
}
|
||
|
|
})
|
||
|
|
)
|
||
|
|
```
|