2025-07-04 16:23:53 +08:00
2025-04-10 18:14:01 +08:00
2025-04-10 18:14:01 +08:00
2025-04-16 11:14:48 +08:00
2025-07-04 16:23:53 +08:00
2025-07-04 16:12:14 +08:00
2025-04-10 18:14:01 +08:00
2025-07-04 16:12:14 +08:00
2025-07-04 14:49:00 +08:00

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

技术细节

混合路由算法

  1. 路径分类: 根据路径是否包含特殊字符(:, *, ?, +)判断类型
  2. 静态匹配: 使用 map[string]Handler 进行O(1)匹配
  3. 动态匹配: 使用优化的正则表达式,支持参数提取
  4. 缓存策略: 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 get
    • fn post
    • fn put
    • fn delete
    • fn patch
    • fn head
    • fn options
    • fn listen
  • Request
    • property url
    • property header
    • property query
    • property header
    • property data
    • property IP
  • Response
    • fn text
    • fn json
    • fn html
  • Router
  • Middleware
S
Description
Web framework like honojs in vlang
Readme
9.1 MiB
Languages
V 84.1%
C 10%
HTML 3.6%
Go 1.9%
Shell 0.2%