refc: Refactor project structure
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
import hono
|
||||
import time
|
||||
import net.http
|
||||
|
||||
fn main() {
|
||||
println('=== 简化FastRouter性能测试 ===')
|
||||
|
||||
// 测试FastRouter vs HybridRouter的基本性能
|
||||
test_basic_performance()
|
||||
|
||||
println('✅ 简化FastRouter性能测试完成')
|
||||
}
|
||||
|
||||
fn test_basic_performance() {
|
||||
println('\n📊 基本性能对比...')
|
||||
|
||||
route_path := '/api/:version/users/:user_id/posts/:post_id'
|
||||
test_path := '/api/v1/users/123/posts/456'
|
||||
|
||||
// 创建FastRouter
|
||||
mut fast_router := hono.FastRouter.new()
|
||||
fast_handler := hono.ContextHandler{
|
||||
path: route_path
|
||||
handler: fn (mut c hono.Context) http.Response {
|
||||
return c.text('fast response')
|
||||
}
|
||||
}
|
||||
fast_router.add_route('GET', fast_handler, '') or {
|
||||
println(' ❌ FastRouter添加路由失败')
|
||||
return
|
||||
}
|
||||
|
||||
// 创建HybridRouter
|
||||
mut hybrid_router := hono.ContextHybridRouter.new()
|
||||
hybrid_handler := hono.ContextHandler{
|
||||
path: route_path
|
||||
handler: fn (mut c hono.Context) http.Response {
|
||||
return c.text('hybrid response')
|
||||
}
|
||||
}
|
||||
hybrid_router.add_route('GET', hybrid_handler, '')
|
||||
|
||||
iterations := 10000
|
||||
|
||||
// 测试FastRouter(第一次匹配)
|
||||
fast_router.clear_cache()
|
||||
|
||||
start_time1 := time.now()
|
||||
mut fast_matches := 0
|
||||
for _ in 0 .. iterations {
|
||||
fast_router.clear_cache()
|
||||
if match_result := fast_router.match_route('GET', test_path) {
|
||||
fast_matches++
|
||||
}
|
||||
}
|
||||
fast_time := time.since(start_time1)
|
||||
|
||||
// 测试HybridRouter(第一次匹配)
|
||||
hybrid_router.clear_cache()
|
||||
hybrid_router.clear_regex_cache()
|
||||
|
||||
start_time2 := time.now()
|
||||
mut hybrid_matches := 0
|
||||
for _ in 0 .. iterations {
|
||||
hybrid_router.clear_cache()
|
||||
hybrid_router.clear_regex_cache()
|
||||
if match_result := hybrid_router.match_route('GET', test_path) {
|
||||
hybrid_matches++
|
||||
}
|
||||
}
|
||||
hybrid_time := time.since(start_time2)
|
||||
|
||||
println(' 第一次匹配性能 (${iterations}次):')
|
||||
if fast_matches > 0 {
|
||||
avg_fast := f64(fast_time.microseconds()) / f64(fast_matches)
|
||||
println(' FastRouter: ${fast_time} (平均 ${avg_fast:.3f}μs)')
|
||||
}
|
||||
|
||||
if hybrid_matches > 0 {
|
||||
avg_hybrid := f64(hybrid_time.microseconds()) / f64(hybrid_matches)
|
||||
println(' HybridRouter: ${hybrid_time} (平均 ${avg_hybrid:.3f}μs)')
|
||||
|
||||
if fast_matches > 0 {
|
||||
avg_fast := f64(fast_time.microseconds()) / f64(fast_matches)
|
||||
if avg_hybrid > avg_fast {
|
||||
improvement := avg_hybrid / avg_fast
|
||||
println(' 🚀 FastRouter提升: ${improvement:.2f}x')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 测试缓存匹配性能
|
||||
start_time3 := time.now()
|
||||
mut fast_cache_matches := 0
|
||||
for _ in 0 .. iterations {
|
||||
if match_result := fast_router.match_route('GET', test_path) {
|
||||
fast_cache_matches++
|
||||
}
|
||||
}
|
||||
fast_cache_time := time.since(start_time3)
|
||||
|
||||
start_time4 := time.now()
|
||||
mut hybrid_cache_matches := 0
|
||||
for _ in 0 .. iterations {
|
||||
if match_result := hybrid_router.match_route('GET', test_path) {
|
||||
hybrid_cache_matches++
|
||||
}
|
||||
}
|
||||
hybrid_cache_time := time.since(start_time4)
|
||||
|
||||
println('\n 缓存匹配性能 (${iterations}次):')
|
||||
if fast_cache_matches > 0 {
|
||||
avg_fast_cache := f64(fast_cache_time.microseconds()) / f64(fast_cache_matches)
|
||||
println(' FastRouter: ${fast_cache_time} (平均 ${avg_fast_cache:.3f}μs)')
|
||||
}
|
||||
|
||||
if hybrid_cache_matches > 0 {
|
||||
avg_hybrid_cache := f64(hybrid_cache_time.microseconds()) / f64(hybrid_cache_matches)
|
||||
println(' HybridRouter: ${hybrid_cache_time} (平均 ${avg_hybrid_cache:.3f}μs)')
|
||||
|
||||
if fast_cache_matches > 0 {
|
||||
avg_fast_cache := f64(fast_cache_time.microseconds()) / f64(fast_cache_matches)
|
||||
if avg_hybrid_cache > avg_fast_cache {
|
||||
improvement := avg_hybrid_cache / avg_fast_cache
|
||||
println(' 🚀 FastRouter提升: ${improvement:.2f}x')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 显示统计信息
|
||||
fast_static, fast_dynamic, fast_cache := fast_router.get_stats()
|
||||
hybrid_static, hybrid_dynamic := hybrid_router.get_all_routes()
|
||||
hybrid_cache_size, _ := hybrid_router.get_cache_stats()
|
||||
|
||||
println('\n 路由统计:')
|
||||
println(' FastRouter - 静态: ${fast_static}, 动态: ${fast_dynamic}, 缓存: ${fast_cache}')
|
||||
println(' HybridRouter - 静态: ${hybrid_static.len}, 动态: ${hybrid_dynamic.len}, 缓存: ${hybrid_cache_size}')
|
||||
|
||||
// 性能分析
|
||||
println('\n 性能分析:')
|
||||
fast_router.analyze_performance()
|
||||
hybrid_router.analyze_router_performance()
|
||||
}
|
||||
Reference in New Issue
Block a user