fast-response v0.2.1
FastResponse for Deno
FastResponse
is an optimized implementation of the Response
constructor for Deno.serve
. By bypassing spec checks, it provides quicker response times compared to the standard API.
Note: FastResponse
relies on accessing internal properties. This may introduce breaking changes if the internal properties of the Deno server API change in the future.
Compatibility
It has been tested and works with Deno version 1.36.4.
Usage
import FastResponse from 'npm:fast-response';
It is intended solely as a return value for Deno.serve
. Using it outside this context is not recommended and will not work.
⚠️ Caution: FastResponse
does not perform any input validation. This design choice contributes to its speed, but users must ensure the safety and correctness of the data they pass into it
Constructor
new FastResponse(
body: null | undefined | Uint8Array | string | ReadableStream,
options?: {
status?: number,
headers?: Array<[string, string]> | Headers
}
)
new FastResponse(body)
The body
parameter accepts values of type null
, undefined
, Uint8Array
, string
, or ReadableStream
.
const hello = new TextEncoder().encode('a'.repeat(1024));
Deno.serve({ port: 3000 }, () => new FastResponse(hello));
new Response(body, { status, headers })
Deno.serve({ port: 3000 }, () => {
return new FastResponse('hello', {
status: 200,
headers: [['Content-Type', 'text/plain']] // new Headers({ 'Content-Type': 'text/plain' })
});
});
FastResponse.json
Deno.serve({ port: 3000 }, () => FastResponse.json({ hello: 'world' }));
Unlike the standard Response
object, FastResponse
does not implement methods like .arrayBuffer()
, .text()
, .clone()
, .blob()
and .json()
. Attempting to use these methods will result in errors.
const response = new FastResponse('body');
const buffer = await response.arrayBuffer(); // Throws an error
Performance
Using wrk
with the following code
const hello = new TextEncoder().encode('a'.repeat(1024));
Deno.serve({ port: 3000 }, () => new FastResponse(hello));
Deno.serve({ port: 3001 }, () => new Response(hello));
Requests/sec | Transfer/sec | |
---|---|---|
new FastResponse() | 268813.99 | 288.41MB |
new FastResponse() with headers | 256938.91 | 282.04MB |
FastResponse.json() | 260490.43 | 36.77MB |
new Response() | 221667.42 | 237.82MB |
new Response() with headers | 178093.76 | 195.49MB |
Response.json() | 247716.75 | 34.96MB |
Caveats
- The usage of internal properties means this solution could break in future versions of Deno