Files
v-hono/README.MD
T

158 lines
4.0 KiB
Markdown

# 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%以上
## 使用方法
### 基本路由
```v
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')
```
### 路由统计
```v
// 获取路由统计信息
static_count, dynamic_count, cache_size, cache_capacity := app.get_router_stats()
println('静态路由: ${static_count}')
println('动态路由: ${dynamic_count}')
println('缓存使用: ${cache_size}/${cache_capacity}')
```
### 缓存管理
```v
// 清理缓存
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 # 说明文档
```
## 运行测试
```bash
# 运行基础测试
v run hono/test.v
# 运行性能测试
v run hono/performance_test.v
```
## 技术细节
### 混合路由算法
1. **路径分类**: 根据路径是否包含特殊字符(`:`, `*`, `?`, `+`)判断类型
2. **静态匹配**: 使用 `map[string]Handler` 进行O(1)匹配
3. **动态匹配**: 使用优化的正则表达式,支持参数提取
4. **缓存策略**: LRU缓存动态路由匹配结果
### LRU缓存实现
- **双向链表**: 维护访问顺序
- **哈希表**: 快速查找缓存项
- **容量控制**: 自动淘汰最久未使用的项
- **线程安全**: 支持并发访问
## 向后兼容
新版本完全兼容原有API,无需修改现有代码即可享受性能提升:
```v
// 原有代码继续有效
app.get('/api/users/:id', fn (req hono.Request) http.Response {
return hono.Response.json('{"user_id": "${req.param["id"]}"}')
})
```
# Features
- [x] Hono App
- [x] `fn get`
- [x] `fn post`
- [x] `fn put`
- [x] `fn delete`
- [x] `fn patch`
- [x] `fn head`
- [x] `fn options`
- [x] `fn listen`
- [x] Request
- [x] `property url`
- [x] `property header`
- [x] `property query`
- [ ] `property header`
- [ ] `property data`
- [ ] `property IP`
- [x] Response
- [x] `fn text`
- [x] `fn json`
- [x] `fn html`
- [ ] Router
- [ ] Middleware