性能基准测试

本页展示 VextJS 与其他主流 Node.js Web 框架的性能基准对比数据。所有测试均在相同硬件环境下运行,以确保公平比较。

测试环境

项目规格
CPUIntel Core i9-13900K (24 核 / 32 线程)
内存64 GB DDR5-5600
操作系统Ubuntu 22.04 LTS
Node.jsv22.12.0
测试工具autocannon v7.15.0
并发连接100
持续时间30 秒
预热5 秒(不计入统计)

⚠️ 注意: 性能基准测试结果受测试环境、负载模式和代码实现方式影响较大。建议在自己的硬件上运行基准测试以获得最准确的结果。


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 })

:::

结果

框架请求/秒 (avg)延迟 p50延迟 p95延迟 p99吞吐量
VextJS (Native)98,4210.9 ms1.8 ms3.2 ms18.2 MB/s
VextJS (Fastify)87,6531.1 ms2.1 ms3.8 ms16.2 MB/s
VextJS (Hono)72,8411.3 ms2.5 ms4.4 ms13.5 MB/s
Fastify v585,3201.1 ms2.2 ms3.9 ms15.8 MB/s
Hono v4 (Node)68,4121.4 ms2.7 ms4.9 ms12.7 MB/s
Express v518,9344.9 ms9.8 ms17.2 ms3.5 MB/s
Koa v224,7163.8 ms7.6 ms13.4 ms4.6 MB/s
NestJS (Express)16,8215.5 ms11.2 ms19.8 ms3.1 MB/s
NestJS (Fastify)79,2341.2 ms2.3 ms4.1 ms14.7 MB/s

数据来源: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"
  }
}

结果

框架请求/秒 (avg)延迟 p50延迟 p95延迟 p99
VextJS (Native)91,2471.0 ms2.0 ms3.5 ms
VextJS (Fastify)81,3341.1 ms2.3 ms4.0 ms
VextJS (Hono)67,5231.4 ms2.8 ms4.9 ms
Fastify v579,8761.2 ms2.4 ms4.2 ms
Hono v4 (Node)62,1031.5 ms3.0 ms5.3 ms
Express v516,7825.6 ms11.3 ms19.9 ms
NestJS (Fastify)73,9101.3 ms2.6 ms4.6 ms

参数校验基准

测试在路由处理时进行请求参数校验的性能开销,VextJS 使用内置 schema-dsl 校验,其他框架使用 zod 或 joi。

测试场景

POST 请求,Body 包含 10 个字段,包括字符串、数字、枚举和嵌套对象。

框架请求/秒 (avg)延迟 p50延迟 p95校验库
VextJS (Native + schema-dsl)84,3121.1 ms2.2 ms内置 schema-dsl
VextJS (Fastify + schema-dsl)74,8911.2 ms2.5 ms内置 schema-dsl
Fastify v5 (ajv)78,2341.2 ms2.4 msajv v8
Fastify v5 (zod)51,8231.8 ms3.7 mszod v3
Express + zod12,3417.6 ms15.3 mszod v3
NestJS (class-validator)42,1562.2 ms4.4 msclass-validator

VextJS 的 schema-dsl 基于 ajv 编译,拥有接近原生 ajv 的校验性能,同时提供更简洁的 DSL 语法。


中间件链基准

测试经过 5 层中间件后的最终路由处理性能,模拟真实应用中认证、日志、限流等中间件叠加场景。

中间件配置

5 层中间件:

  1. 请求 ID 注入
  2. 请求日志记录(内存 Buffer,不写磁盘)
  3. JWT 验证(跳过签名验证,仅解析)
  4. 限流检查(内存计数器)
  5. 响应头注入
框架请求/秒 (avg)较无中间件损耗延迟 p99
VextJS (Native)79,834-18.9%4.1 ms
VextJS (Fastify)57,221-21.5%5.6 ms
Fastify v568,901-19.2%4.8 ms
Express v513,421-29.1%22.4 ms
Koa v218,934-23.4%18.1 ms

Adapter 对比

VextJS 支持多种底层 HTTP Adapter,性能差异主要来源于底层 HTTP 实现:

Adapter请求/秒 (Hello World)特性适用场景
native(默认)~98,000零框架依赖,Node 原生 http + find-my-way推荐,性能最高
fastify~87,000高性能 + 生态丰富需要 Fastify 插件生态
hono~72,000Web Standards API,超轻量全栈 / 边缘运行时
express~18,000最大中间件生态迁移现有 Express 项目
koa~24,000轻量优雅中小型项目
node-cluster~340,000*多进程,线性扩展多核 CPU 服务器

* 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 模式与单进程模式的吞吐量对比:

模式Worker 数请求/秒CPU 利用率内存
单进程 (Native)198,42112%48 MB
Cluster × 22192,83424%96 MB
Cluster × 44381,20147%192 MB
Cluster × 88743,89291%384 MB
Cluster × 1616891,23498%768 MB

8 核以上受 CPU 调度开销影响,扩展效率略有下降,但仍接近线性扩展。


内存基准

框架空载时的内存占用(仅启动 HTTP 服务器,无请求处理):

框架启动内存10 万请求后GC 压力
VextJS (Native)18 MB22 MB
VextJS (Hono)24 MB28 MB
VextJS (Fastify)31 MB38 MB
Fastify v529 MB36 MB
Express v542 MB58 MB
NestJS (Express)86 MB112 MB
NestJS (Fastify)71 MB94 MB低-中

启动时间

从进程启动到第一个请求可响应的时间(冷启动):

框架冷启动时间热重载时间
VextJS (Native)42 ms180 ms
VextJS (Fastify)68 ms210 ms
Fastify v561 ms
Express v538 ms
NestJS1,240 ms

VextJS 热重载时间包含 esbuild 增量编译 + worker 替换的完整流程,实际热重载感知延迟约 200 ms。


如何自行运行基准测试

克隆基准仓库

git clone https://github.com/vextjs/benchmarks
cd benchmarks
pnpm install

运行所有基准

pnpm run bench

运行单个框架

# 仅测试 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× 的吞吐量提升

性能建议

场景推荐配置
极致性能(云原生,单机高并发)adapter: 'native' + Cluster × CPU核数
生产环境(通用)adapter: 'native''fastify' + Cluster × (CPU核数-1)
轻量部署(容器 / 边缘)adapter: 'native',单进程,零框架依赖
全栈 / 边缘运行时adapter: 'hono',兼容 Web Standards API
开发环境adapter: 'native'(默认),热重载最快

相关链接