性能基准测试
本页展示 VextJS 与其他主流 Node.js Web 框架的性能基准对比数据。所有测试均在相同硬件环境下运行,以确保公平比较。
测试环境
⚠️ 注意: 性能基准测试结果受测试环境、负载模式和代码实现方式影响较大。建议在自己的硬件上运行基准测试以获得最准确的结果。
Hello World 基准
最简路由场景:返回固定字符串响应,不含任何业务逻辑,测试框架原始吞吐量。
测试代码
::: code-tabs
@tab VextJS
// src/routes/index.ts
import { defineRoutes } from 'vextjs'
export default defineRoutes((router) => {
router.get('/', async (ctx) => {
ctx.body = { message: 'Hello, World!' }
})
})
@tab Fastify
const fastify = require('fastify')()
fastify.get('/', async () => {
return { message: 'Hello, World!' }
})
fastify.listen({ port: 3000 })
@tab Express
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.json({ message: 'Hello, World!' })
})
app.listen(3000)
@tab Hono (Node)
import { Hono } from 'hono'
import { serve } from '@hono/node-server'
const app = new Hono()
app.get('/', (c) => c.json({ message: 'Hello, World!' }))
serve({ fetch: app.fetch, port: 3000 })
:::
结果
数据来源:benchmark 仓库,2026-01-15 测试
JSON 序列化基准
测试返回包含嵌套对象的 JSON 响应的性能,贴近真实 API 场景。
响应结构
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"createdAt": "2026-01-15T08:00:00.000Z",
"profile": {
"avatar": "https://example.com/avatar.png",
"bio": "Software Engineer",
"location": "Shanghai, China"
},
"roles": ["user", "admin"],
"metadata": {
"loginCount": 42,
"lastLogin": "2026-01-14T20:30:00.000Z"
}
}
结果
参数校验基准
测试在路由处理时进行请求参数校验的性能开销,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 性能可视化
Native ████████████████████████████████████████ 98,421 req/s
Fastify ████████████████████████████████████ 87,653 req/s
Hono ████████████████████████████████ 72,841 req/s
Koa ██████████ 24,716 req/s
Express ████████ 18,934 req/s
Cluster 模式基准
测试在多核环境下,VextJS Cluster 模式与单进程模式的吞吐量对比:
8 核以上受 CPU 调度开销影响,扩展效率略有下降,但仍接近线性扩展。
内存基准
框架空载时的内存占用(仅启动 HTTP 服务器,无请求处理):
启动时间
从进程启动到第一个请求可响应的时间(冷启动):
VextJS 热重载时间包含 esbuild 增量编译 + worker 替换的完整流程,实际热重载感知延迟约 200 ms。
如何自行运行基准测试
克隆基准仓库
git clone https://github.com/vextjs/benchmarks
cd benchmarks
pnpm install
运行所有基准
运行单个框架
# 仅测试 VextJS (Native)
pnpm run bench:vext-native
# 仅测试 VextJS (Fastify)
pnpm run bench:vext-fastify
# 仅测试 Express
pnpm run bench:express
使用 autocannon 手动测试
# 启动 VextJS 测试服务器
pnpm run start:vext &
# 运行 autocannon
npx autocannon -c 100 -d 30 -p 10 http://localhost:3000/
# 停止服务器
kill %1
配置说明
在 bench.config.ts 中调整测试参数:
export default {
connections: 100, // 并发连接数
duration: 30, // 测试持续秒数
warmup: 5, // 预热秒数
pipelining: 1, // HTTP 管道化请求数
workers: 1, // autocannon worker 线程数
}
结论
- 最高吞吐量: VextJS + uWS Adapter,在 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× 的吞吐量提升
性能建议
相关链接