性能基准
这份基准用于帮助你选择 Vext HTTP Adapter。它固定同一个 Vext 应用,在相同的轻量 Normal 负载下比较五个受支持的 Adapter。它适合作为 Adapter 选型输入,不替代你的应用在真实中间件、鉴权、日志、数据库和部署环境下的压测。
适用版本与证据
本页保留 2026-08-15、Vext 1.0.1 / 指定源码提交的历史测量,不是当前 Vext 2.0.0 的性能基线。下方生成区的“当前结果”表示仓库最近保留的样本,不表示重新测量了当前代码。
样本数值与仓库 RESULTS.md 所述运行对应;当前工作副本保存了结果 Markdown,但没有原始 adapter-matrix-formal-release.json。本次文档核对没有重跑压测,也没有完成原始 JSON 到生成区的一致性校验。引用时保留时间、版本、负载和证据限制,不能把数字转成跨版本的能力保证。
先看结论
- 这是 Adapter 对比,不是跨框架排行榜。 每一行均使用相同的 Vext routes、Normal bootstrap、handler 模式、HTTP 契约、中间件 fixture 和压测协议;唯一变量是 Adapter。
- 历史样本的机器和负载下 Native 的吞吐最高。 这是当前环境观测,不是它在所有环境中都最优的承诺。
- 本样本中 Fastify 与 Koa 的吞吐随后,Hono 与 Express 则取舍各自的编程模型和生态。 对于较小差异,请结合 CV 和延迟数据判断。
- 先按集成和迁移需求选择,再用你的业务复测。 Native 是依赖更轻的默认路径;需要相应生态时选择 Fastify、Express、Koa 或 Hono。
范围说明: 本页比较同一个 Vext Normal 应用通过不同 Vext Adapter 的开销。表中的
Fastify、Hono、Express和Koa列不是这些框架的独立或裸性能,也不代表它们各自推荐生产配置的性能。生产选型请以你的应用、实际中间件与部署配置的压测为准。
当前结果
本次正式运行记录于 2026-08-15T00:07:37.413Z,使用干净的 Vext 源码 main@772d3eab9f3826a55526deaf2ad6b1c128bda446(Vext 1.0.1;Node.js v20.20.2)。所有数字均为 7 轮 req/s 的中位数,数值越高表示该测试场景中的吞吐越高。
全部 20 个 Adapter/场景测量均为零错误、零超时、零非 2xx 响应。每个场景的 CV 在 0.2%–1.4% 之间。完整的逐轮样本、P50/P99、精确版本、provenance 和路由生命周期 telemetry 均在本页下方。
为什么这样对比
面向使用者的决策是选择哪个 Vext Adapter,所以每个目标均运行同一个 Vext Normal 应用。routes、defineRoutes() 加载、路由匹配、请求/响应对象、中间件 fixture、handler 模式、响应契约、进程优先级和 Autocannon 协议均保持不变,唯一变量是 Adapter。
fixture 有意关闭这些 GET 场景不使用的可选请求能力:access log、生成的 request ID、CORS、rate limit、response wrap、body parser、request context、session、CSRF、security headers、frontend render 和应用日志。它仍保留 Normal bootstrap 与路由生命周期。因此比较具有聚焦性和可复现性,但它不是全能力生产负载,也不是数据库/I/O 基准。
为什么不发布“生产栈排行”或“裸路径排行”?
生产压测是上线前的必要步骤,但认证、日志、安全、中间件、数据与外部 I/O、部署拓扑、硬件和业务复杂度都会不同。把这些结果放进一张跨框架 RPS 表,测到的是整套应用组合,不能可靠归因为框架或 Adapter。
另一端的裸路径或最短 HTTP 路径对维护者有诊断价值,但会省略 Vext 使用者实际选择的 Normal bootstrap、路由生命周期、请求/响应适配和中间件集成,因此不应用作用户选型排名。
本页固定同一个 Vext Normal 应用与压测协议,只更换 Adapter。它衡量的是固定、可复现负载下的 Vext Adapter 集成路径开销,不是 Fastify、Hono、Express 或 Koa 的独立性能。生产选型仍应以你的真实应用压测为准。
如何选择
详细安装和配置请参见 Adapter 指南。
测试口径
正式运行前,runner 会将这些依赖与当日 npm latest 核对;任一版本、源码身份、非 2xx、连接错误、超时、缺失结果或 CV 门禁失败都会拒绝生成可引用报告。目标按轮次交错执行,减少时间漂移固定偏向某一实现。
完整正式样本
此完整正式样本与上方当前结果摘要由同一 artifact 生成,并保留在本页中,使结论、方法和每一条测量数据可以一起审阅。
运行身份
场景
每一个测量样本
Normal 路由生命周期 telemetry
精确环境与版本
自己复现
先安装锁文件中的依赖并确认 benchmark 版本仍是当前 npm latest:
在仓库根目录使用干净源码执行相同协议的 Adapter 对照;当前代码与依赖生成的是新基线。历史锁文件与今日 latest 可能不同,latest 门禁失败时不要跳过它后仍称为正式结果:
正式完整矩阵耗时约55分钟且会占用本机资源,运行前准备空闲环境。命令会更新测试报告并启动/停止本地测试目标;若中断,应确认没有遗留被测进程。新结果通过完整门禁后,才由维护者使用现有生成器更新站点;缺原始 JSON 时,verify:benchmark-docs 会失败,不能从展示表反造原始 artifact。
本样本使用同步 handler。如果你的平台或权限需要不同的优先级,请改用可用值,并将结果视为新的环境基线,不要直接与本页绝对数值比较。
runner 使用本地 Autocannon programmatic API,会自动启动和停止测试目标。本页包含全部样本、P50/P99、精确版本、provenance 和路由生命周期 telemetry;完整参数、adapter matrix 命令和 artifact 合并规则见 benchmark README。
测试真实应用
框架微基准只回答“核心 HTTP 路径的成本”。上线前至少应在与你的生产环境相近的机器上加入:
- 实际认证、日志、响应包装和中间件;
- 数据库、缓存和外部 API 的真实或可控替身;
- 预热、多个轮次、吞吐、P95/P99、错误率和资源占用;
- 与生产一致的 Node.js 版本、进程数、容器限额和反向代理。
限制
-
P50/P99 来自 RPS 中位数所对应的那一轮,不是汇总七轮全部请求后计算的分位数;CV 表达轮次吞吐的相对波动,不是置信区间。
-
当前结果来自一台 Windows 主机,不代表 Linux、容器或云环境。
-
这是轻量 HTTP 微基准,不衡量开发体验、插件质量、可维护性或完整业务延迟。
-
不同日期、机器、依赖版本、handler 模式或压测协议的绝对数字不可直接合并排名。
-
本表只比较 Vext Adapter。裸框架与最短路径诊断单独维护,不是面向使用者的 Adapter 排名。