fc3b70349d9226e07eb020bac08e3c01db17a2d0
Hono - V语言Web框架
一个高性能的V语言Web框架,支持混合路由和LRU缓存。
特性
- 🚀 混合路由系统: 结合静态路径和动态路径的高效匹配
- ⚡ LRU缓存: 智能缓存路由匹配结果,大幅提升性能
- 🎯 向后兼容: 保持原有API不变,平滑升级
- 📊 性能监控: 内置路由统计和缓存监控功能
核心改进
1. 混合路由系统
- 静态路径: 如
/api/users、/api/posts等,使用哈希表直接匹配,O(1)时间复杂度 - 动态路径: 如
/api/users/:id、/api/**/search等,使用优化的正则表达式匹配 - 智能分类: 自动识别路径类型,选择最优匹配策略
2. LRU缓存
- 缓存容量: 默认1000个路由匹配结果
- LRU策略: 最近最少使用的缓存项会被自动淘汰
- 缓存命中: 重复访问相同路径时,直接从缓存返回结果
- 性能提升: 动态路由匹配性能提升可达80%以上
使用方法
基本路由
import hono
mut app := hono.Hono{}
// 静态路由 - 直接匹配,性能最优
app.get('/api/users', fn (req hono.Request) http.Response {
return hono.Response.json('{"users": []}')
})
// 动态路由 - 支持参数提取
app.get('/api/users/:id', fn (req hono.Request) http.Response {
user_id := req.param['id']
return hono.Response.json('{"user_id": "${user_id}"}')
})
// 通配符路由 - 支持 ** 模式
app.get('/api/**/search', fn (req hono.Request) http.Response {
return hono.Response.json('{"search": "wildcard"}')
})
app.listen(':3000')
路由统计
// 获取路由统计信息
static_count, dynamic_count, cache_size, cache_capacity := app.get_router_stats()
println('静态路由: ${static_count}')
println('动态路由: ${dynamic_count}')
println('缓存使用: ${cache_size}/${cache_capacity}')
缓存管理
// 清理缓存
app.clear_cache()
// 获取缓存统计
cache_size, cache_capacity := app.hybrid_router.get_cache_stats()
性能对比
| 路由类型 | 原有实现 | 混合路由 | 性能提升 |
|---|---|---|---|
| 静态路由 | 正则匹配 | 哈希表 | 95%+ |
| 动态路由 | 每次编译正则 | LRU缓存 | 80%+ |
| 通配符路由 | 每次编译正则 | LRU缓存 | 80%+ |
文件结构
hono/
├── app.v # 主应用文件,集成混合路由
├── router.v # 混合路由器实现
├── cache.v # LRU缓存实现
├── request.v # 请求结构
├── response.v # 响应结构
├── test.v # 基础测试
├── performance_test.v # 性能测试
└── README.MD # 说明文档
运行测试
# 运行基础测试
v run hono/test.v
# 运行性能测试
v run hono/performance_test.v
技术细节
混合路由算法
- 路径分类: 根据路径是否包含特殊字符(
:,*,?,+)判断类型 - 静态匹配: 使用
map[string]Handler进行O(1)匹配 - 动态匹配: 使用优化的正则表达式,支持参数提取
- 缓存策略: LRU缓存动态路由匹配结果
LRU缓存实现
- 双向链表: 维护访问顺序
- 哈希表: 快速查找缓存项
- 容量控制: 自动淘汰最久未使用的项
- 线程安全: 支持并发访问
向后兼容
新版本完全兼容原有API,无需修改现有代码即可享受性能提升:
// 原有代码继续有效
app.get('/api/users/:id', fn (req hono.Request) http.Response {
return hono.Response.json('{"user_id": "${req.param["id"]}"}')
})
Features
- Hono App
fn getfn postfn putfn deletefn patchfn headfn optionsfn listen
- Request
property urlproperty headerproperty queryproperty headerproperty dataproperty IP
- Response
fn textfn jsonfn html
- Router
- Middleware
Languages
V
84.1%
C
10%
HTML
3.6%
Go
1.9%
Shell
0.2%