# 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