性能基准测试

本页展示 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 侧会关闭或收紧以下非核心默认能力:

  • accessLog
  • requestId
  • cors
  • rateLimit
  • response.wrap
  • bodyParser
  • requestContext
  • 日志级别改为 silent

⚠️ 这意味着:本页数据更接近“框架核心路径 / adapter 层”的对比结果,而不是默认生产配置下开启全部内置能力时的最终吞吐量承诺。

若你要评估真实业务场景,请结合自己的中间件、日志、鉴权、响应包装、数据库访问和部署环境重新压测。

测试环境

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

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


Hello World 基准

最简路由场景:返回固定字符串响应,不含任何业务逻辑,测试框架原始吞吐量。

测试代码

::: code-tabs @tab VextJS

// src/routes/index.ts
import { defineRoutes } from "vextjs";

export default defineRoutes((app) => {
  app.get("/", {}, async (req, res) => {
    res.json({ 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 测试。当前版本复现实测请优先运行本仓库 test/benchmark/run-benchmark.mjs


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零外部 HTTP 框架依赖,Node 原生 http + route-core推荐,性能最高
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。


如何自行运行基准测试

运行当前仓库内基准

npm install
npm run test:bench -- --scenario all --rounds 5

运行单个框架

# 仅测试 VextJS (Native)
npm run test:bench -- --framework native --scenario all --rounds 5

# 仅测试 VextJS (Fastify)
npm run test:bench -- --framework fastify --scenario all --rounds 5

# 仅测试真实 route-level middleware chain
npm run test:bench -- --scenario middleware-chain --rounds 5

使用 autocannon 手动测试

当前仓库的 benchmark runner 会自动启动/停止测试服务器,并通过 npm exec --package=autocannon@8.0.0 调用 autocannon。通常不需要手动启动服务器。

如需对一个已启动的本地服务单独压测,可直接运行:

# 运行 autocannon
npx --yes --package=autocannon@8.0.0 autocannon -c 100 -d 30 -p 10 http://localhost:3000/

配置说明

当前 benchmark 通过 CLI 参数配置,不存在 bench.config.ts

参数默认值说明
--duration15压测持续秒数
--connections50并发连接数
--pipelining10HTTP pipeline 深度
--warmup5预热秒数
--rounds1轮次;PR / 发版前建议 5 或 7
--scenarioalljson / params / chain / middleware-chain / all
--framework全部框架过滤,逗号分隔
--outputtest/benchmark/RESULTS.md报告输出路径

结论

  • 历史最高吞吐量: 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× 的吞吐量提升

性能建议

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

相关链接