扫一扫分享
undici
从头开始为Node.js编写的HTTP / 1.1客户端。
Undici在意大利语中的含义是11。 1.1-> 11-> 11-> Undici。 它也是《陌生人事物》参考。 undici,它比内置的 HTTP 模块还要快,undici 团队致力于为 Node.js 开发快速、可靠且符合规范的 HTTP 客户端。
“很多人仍然问我们为什么要构建 Node.js 核心 HTTP 堆栈的替代品——虽然它对他们来说效果很好。现实情况是,Node.js 核心 HTTP 堆栈存在基本设计问题,如果不破坏 api,就无法克服这些问题。在不破坏我们的大多数用户的情况下,我们无法修复某些错误或性能瓶颈——无论是在客户端还是服务器实现上,因为它们紧密相连。”
我们可以直接通过 npm 来安装 undici:
npm install undici -S
undici 对外暴露一个对象,该对象下面提供了几个 API:
下面是一个在 Node.js 16 上做的一个基准测试,通过与最慢的数据做对比,之间相差还是挺大的。
Tests | Samples | Result | Tolerance | Difference with slowest |
---|---|---|---|---|
http - no keepalive | 15 | 4.63 req/sec | ± 2.77 % | - |
http - keepalive | 10 | 4.81 req/sec | ± 2.16 % | + 3.94 % |
undici - stream | 25 | 62.22 req/sec | ± 2.67 % | + 1244.58 % |
undici - dispatch | 15 | 64.33 req/sec | ± 2.47 % | + 1290.24 % |
undici - request | 15 | 66.08 req/sec | ± 2.48 % | + 1327.88 % |
undici - pipeline | 10 | 66.13 req/sec | ± 1.39 % | + 1329.08 % |
Tests | Samples | Result | Tolerance | Difference with slowest |
---|---|---|---|---|
http - no keepalive | 50 | 3546.49 req/sec | ± 2.90 % | - |
http - keepalive | 15 | 5692.67 req/sec | ± 2.48 % | + 60.52 % |
undici - pipeline | 25 | 8478.71 req/sec | ± 2.62 % | + 139.07 % |
undici - request | 20 | 9766.66 req/sec | ± 2.79 % | + 175.39 % |
undici - stream | 15 | 10109.74 req/sec | ± 2.94 % | + 185.06 % |
undici - dispatch | 25 | 10949.73 req/sec | ± 2.54 % | + 208.75 % |
import { request } from 'undici'
const {
statusCode,
headers,
trailers,
body
} = await request('http://localhost:3000/foo')
console.log('response received', statusCode)
console.log('headers', headers)
for await (const data of body) {
console.log('data', data)
}
console.log('trailers', trailers)
手机预览