undici-shim v1.5.3
undici-shim
A small ESM/UMD library providing the fast request
function from Undici within Node, otherwise window.fetch
is utilized when running in a browser environment.
Why?
Upon trying to distribute a project, I found Undici could not be used on the client-side. As such, this is a drop-in replacement for Undici when using bundlers like webpack/rollup.
Without the overhead of WHATWG Streams, the request method proves much faster than fetch in both latency and throughput.
Tests | Samples | Results | Tolerance | Difference with slowest |
---|---|---|---|---|
undici - fetch | 20 | 1028.31 req/sec | ± 2.71 % | - |
http - no keepalive | 10 | 3891.51 req/sec | ± 2.00 % | + 278.44 % |
undici - pipeline | 95 | 6034.47 req/sec | ± 2.95 % | + 486.83 % |
http - keepalive | 50 | 6382.57 req/sec | ± 2.98 % | + 520.68 % |
undici - request | 15 | 8528.35 req/sec | ± 2.11 % | + 729.35 % |
Install
npm i undici-shim
Usage
ESM
import request from 'undici-shim'
const res = await request('https://jsonplaceholder.typicode.com/posts/1')
console.log(await res.body.json())
You can also use Undici fetch instead of request for consistency across environments.
import { fetch } from 'undici-shim'
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1')
console.log(await res.json())
CommonJS
const { fetch } = require('undici-shim')
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => res.json())
.then(console.log)
Named Exports
Node Starting from v1.3.2, named exports are identical to Undici.
import { request, Dispatcher, Headers, ... } = from 'undici-shim'
Browser
import { fetch, Request, Response, Headers } = from 'undici-shim'
1 month ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago