算法分享: Golang HTTP 动态请求路径解析

查看 173|回复 16
ClarkAbe   
那你的 Benchmark 代码测试了一下我自己的新 router tux...
https://imgur.com/a/ZHM1oFI
我的路由结构是空间换时间以及利用数组不会 GC 的特性
```golang
type Tree struct {
father *Tree // 父路由节点
children [255]*Tree // 子路由节点
part []uint8 // 路径参数 (例如: :name *name)
method *Method // 路由方法 (methodTyp 类型)
}
```
```txt
Running tool: /usr/bin/go test -benchmem -run=^$ -bench ^BenchmarkRouteTree_Get$ tux
goos: linux
goarch: amd64
pkg: tux
cpu: AMD Ryzen 7 5800H with Radeon Graphics
BenchmarkRouteTree_Get-16 122476156 9.885 ns/op 0 B/op 0 allocs/op
PASS
ok tux        2.232s
```
Nazz
OP
  
@ClarkAbe 可以控制变量和我的对比下: 1024 个接口, 每个路径分 4 段, 参数位置随机
Nazz
OP
  
@ClarkAbe 我的测试代码在这里: https://github.com/lxzan/uRouter/blob/main/trie_test.go
ClarkAbe   
@Nazz 我就是完全抄的你的测试代码.....
ClarkAbe   
@Nazz 后续我把我的开源出来吧.....不过我框架还没写完, 还在整合 rest 接口架构
ClarkAbe   
@Nazz gin 大部分用了 pool 来减少分配次数
Nazz
OP
  
@ClarkAbe 还好吧,只在注册接口的时候创建一次 map, split 的 alloc 不可避免. 后续我测试下 sliceMap 怎么样,O(n)遍历数组
您需要登录后才可以回帖 登录 | 立即注册

返回顶部