性能基准测试
本页展示 VextJS 与其他主流 Node.js Web 框架的性能基准对比数据。当前版本的可复现基准以仓库内 test/benchmark/run-benchmark.mjs 为准;页面中的历史 benchmark 仓库数据仅用于趋势参考。
对比口径说明(请先阅读)
当前 repo-local benchmark 衡量的是相同场景、相同压测参数、尽量相同功能负载下的吞吐量对比,而不是“默认开箱全功能配置”的直接对比。
- Raw(裸跑):直接使用底层框架原生 API 实现同一测试场景
- Vext:通过 Vext 启动相同场景,但为了与 Raw 公平对比,会关闭非必要默认能力,只保留 adapter / 路由层核心开销
- chain:历史兼容场景,表示 handler 内联业务逻辑链
- middleware-chain:真实 route-level middleware chain,会进入 adapter 的中间件链执行器
当前 benchmark 中,Vext 侧会关闭或收紧以下非核心默认能力:
accessLogrequestIdcorsrateLimitresponse.wrapbodyParserrequestContext- 日志级别改为
silent
⚠️ 这意味着:本页数据更接近“框架核心路径 / adapter 层”的对比结果,而不是默认生产配置下开启全部内置能力时的最终吞吐量承诺。
若你要评估真实业务场景,请结合自己的中间件、日志、鉴权、响应包装、数据库访问和部署环境重新压测。
测试环境
⚠️ 注意: 性能基准测试结果受测试环境、负载模式和代码实现方式影响较大。建议在自己的硬件上运行基准测试以获得最准确的结果。
Hello World 基准
最简路由场景:返回固定字符串响应,不含任何业务逻辑,测试框架原始吞吐量。
测试代码
::: code-tabs @tab VextJS
@tab Fastify
@tab Express
@tab Hono (Node)
:::
结果
历史数据来源:benchmark 仓库,2026-01-15 测试。当前版本复现实测请优先运行本仓库
test/benchmark/run-benchmark.mjs。
JSON 序列化基准
测试返回包含嵌套对象的 JSON 响应的性能,贴近真实 API 场景。
响应结构
结果
参数校验基准
测试在路由处理时进行请求参数校验的性能开销,VextJS 使用内置 schema-dsl 校验,其他框架使用 zod 或 joi。
测试场景
POST 请求,Body 包含 10 个字段,包括字符串、数字、枚举和嵌套对象。
VextJS 的 schema-dsl 基于 ajv 编译,拥有接近原生 ajv 的校验性能,同时提供更简洁的 DSL 语法。
中间件链基准
测试经过 5 层中间件后的最终路由处理性能,模拟真实应用中认证、日志、限流等中间件叠加场景。
中间件配置
5 层中间件:
- 请求 ID 注入
- 请求日志记录(内存 Buffer,不写磁盘)
- JWT 验证(跳过签名验证,仅解析)
- 限流检查(内存计数器)
- 响应头注入
Adapter 对比
VextJS 支持多种底层 HTTP Adapter,性能差异主要来源于底层 HTTP 实现:
*Cluster 数据为 8 核 worker 合计吞吐量(单进程 ×8 近线性扩展)。 注:uWS(uWebSockets.js)adapter 尚未内置,列为未来规划(roadmap)。
Adapter 性能可视化
Cluster 模式基准
测试在多核环境下,VextJS Cluster 模式与单进程模式的吞吐量对比:
8 核以上受 CPU 调度开销影响,扩展效率略有下降,但仍接近线性扩展。
内存基准
框架空载时的内存占用(仅启动 HTTP 服务器,无请求处理):
启动时间
从进程启动到第一个请求可响应的时间(冷启动):
VextJS 热重载时间包含 esbuild 增量编译 + worker 替换的完整流程,实际热重载感知延迟约 200 ms。
如何自行运行基准测试
运行当前仓库内基准
运行单个框架
使用 autocannon 手动测试
当前仓库的 benchmark runner 会自动启动/停止测试服务器,并通过 npm exec --package=autocannon@8.0.0 调用 autocannon。通常不需要手动启动服务器。
如需对一个已启动的本地服务单独压测,可直接运行:
配置说明
当前 benchmark 通过 CLI 参数配置,不存在 bench.config.ts:
结论
- 历史最高吞吐量: VextJS + Native Adapter,在 2026-01-15 历史 Hello World 场景下达到约 98,000 req/s,开启 Cluster 模式可突破 700,000 req/s(8 核)
- 最低内存: VextJS + Native Adapter,空载仅 18 MB,适合资源受限环境
- 最快启动: VextJS + Native Adapter,冷启动约 42 ms,热重载约 180 ms
- 校验性能: 内置 schema-dsl 基于 ajv 编译,校验开销极低,接近原生 ajv 性能
- 扩展性: Cluster 模式下接近线性扩展,8 核可获得约 7.6× 的吞吐量提升
性能建议
相关链接
- benchmarks 仓库 — 完整测试代码和历史数据
- Adapter 架构 — 了解各 Adapter 的技术实现
- Cluster 多进程 — 如何配置和使用 Cluster 模式
- 配置项 —
adapter配置字段详情