perf: use picoev as default Server for improve response concurrency
This commit is contained in:
@@ -1,36 +1,55 @@
|
||||
# vweb vs v-hono 性能对比测试
|
||||
# veb vs v-hono 性能对比测试
|
||||
|
||||
## 测试文件说明
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `benchmark_vweb_vs_hono.v` | 路由匹配性能测试(纯路由,不启动服务器) |
|
||||
| `server_vweb.v` | vweb HTTP 服务器示例(端口 8080) |
|
||||
| `benchmark_veb_vs_hono.v` | 路由匹配性能测试(纯路由,不启动服务器) |
|
||||
| `server_veb.v` | veb HTTP 服务器示例(端口 8080)- V 语言官方新版 web 框架 |
|
||||
| `server_vweb.v` | vweb HTTP 服务器示例(端口 8080)- 旧版兼容 |
|
||||
| `server_hono.v` | v-hono HTTP 服务器示例(端口 8081) |
|
||||
| `http_benchmark.v` | HTTP 压测工具(自动对比两个服务器) |
|
||||
| `run_benchmark.ps1` | Windows PowerShell 一键测试脚本 |
|
||||
|
||||
## 快速开始
|
||||
|
||||
### Windows 用户(推荐)
|
||||
|
||||
```powershell
|
||||
cd examples
|
||||
.\run_benchmark.ps1
|
||||
```
|
||||
|
||||
### 1. 路由匹配性能测试
|
||||
|
||||
```bash
|
||||
v run benchmark_vweb_vs_hono.v
|
||||
cd examples
|
||||
v run benchmark_veb_vs_hono.v
|
||||
```
|
||||
|
||||
### 2. HTTP 服务器压测
|
||||
|
||||
启动 vweb 服务器:
|
||||
#### 方式一:使用内置压测工具
|
||||
|
||||
终端 1 - 启动 veb 服务器:
|
||||
```bash
|
||||
v run server_vweb.v
|
||||
v run server_veb.v
|
||||
```
|
||||
|
||||
启动 v-hono 服务器(另一个终端):
|
||||
终端 2 - 启动 v-hono 服务器:
|
||||
```bash
|
||||
v run server_hono.v
|
||||
```
|
||||
|
||||
使用 wrk 或 ab 进行压测:
|
||||
终端 3 - 运行压测:
|
||||
```bash
|
||||
# 测试 vweb
|
||||
v run http_benchmark.v
|
||||
```
|
||||
|
||||
#### 方式二:使用 wrk 或 ab
|
||||
|
||||
```bash
|
||||
# 测试 veb
|
||||
wrk -t4 -c100 -d10s http://localhost:8080/
|
||||
wrk -t4 -c100 -d10s http://localhost:8080/api/users/123
|
||||
|
||||
@@ -45,6 +64,15 @@ ab -n 10000 -c 100 http://localhost:8080/
|
||||
ab -n 10000 -c 100 http://localhost:8081/
|
||||
```
|
||||
|
||||
### 3. 编译优化版本(推荐用于正式压测)
|
||||
|
||||
```bash
|
||||
cd examples
|
||||
v -prod server_veb.v -o server_veb.exe
|
||||
v -prod server_hono.v -o server_hono.exe
|
||||
v -prod http_benchmark.v -o http_benchmark.exe
|
||||
```
|
||||
|
||||
## 测试结果分析
|
||||
|
||||
### 路由匹配性能
|
||||
@@ -71,3 +99,49 @@ ab -n 10000 -c 100 http://localhost:8081/
|
||||
| `GET /api/users/:id/posts` | 动态 | 获取用户的帖子 |
|
||||
| `GET /api/users/:user_id/posts/:post_id` | 动态 | 获取特定帖子 |
|
||||
| `GET /api/categories/:cat/items/:item` | 动态 | 获取分类商品 |
|
||||
|
||||
|
||||
## 测试结果分析
|
||||
|
||||
### 路由匹配性能
|
||||
|
||||
| 路由类型 | SimpleRouter (模拟 veb) | v-hono FastRouter |
|
||||
|----------|-------------------------|-------------------|
|
||||
| 静态路由 | ~1000 ns/op | ~9500 ns/op |
|
||||
| 动态路由 | ~15000-25000 ns/op | ~9500 ns/op |
|
||||
|
||||
### HTTP 吞吐量(参考值)
|
||||
|
||||
| 端点类型 | veb | v-hono | 说明 |
|
||||
|----------|-----|--------|------|
|
||||
| 静态路由 | ~15000 req/s | ~12000 req/s | veb 略快 |
|
||||
| 动态路由 | ~8000 req/s | ~10000 req/s | v-hono 更稳定 |
|
||||
|
||||
> 注:实际性能取决于硬件配置和系统负载
|
||||
|
||||
## 结论
|
||||
|
||||
- **静态路由**:veb/SimpleRouter 使用 map 直接查找,通常更快
|
||||
- **动态路由**:v-hono 使用 Trie + 缓存,性能更稳定
|
||||
- **v-hono 优势**:动态路由性能一致,不随路由复杂度增加而显著下降
|
||||
- **veb 优势**:官方支持,与 V 语言生态集成更好
|
||||
|
||||
## 测试端点
|
||||
|
||||
| 端点 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET /` | 静态 | Hello World |
|
||||
| `GET /api/health` | 静态 | 健康检查 |
|
||||
| `GET /api/users` | 静态 | 获取用户列表 |
|
||||
| `POST /api/users` | 静态 | 创建用户 |
|
||||
| `GET /api/users/:id` | 动态 | 获取单个用户 |
|
||||
| `GET /api/users/:id/posts` | 动态 | 获取用户的帖子 |
|
||||
| `GET /api/users/:user_id/posts/:post_id` | 动态 | 获取特定帖子 |
|
||||
| `GET /api/categories/:cat/items/:item` | 动态 | 获取分类商品 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **veb vs vweb**:veb 是 V 语言官方的新版 web 框架,替代了旧的 vweb
|
||||
2. **编译优化**:正式压测时请使用 `-prod` 编译优化版本
|
||||
3. **预热**:测试前建议先发送一些请求预热服务器
|
||||
4. **环境隔离**:压测时关闭其他占用 CPU 的程序
|
||||
|
||||
Reference in New Issue
Block a user