perf(proxy): optimize hot request paths

- Cache route handlers, simplify NoRoute path normalization, and reduce matcher/header allocations

- Honor configured transport pool limits in auto mode and add hotpath regression benchmarks/tests
This commit is contained in:
wjqserver 2026-04-12 03:22:05 +08:00
parent e2719aa761
commit ba3dcf7624
9 changed files with 437 additions and 51 deletions

View file

@ -60,6 +60,17 @@ func copyHeader(dst, src http.Header) {
}
}
func copyHeaderFiltered(dst, src http.Header, denylist map[string]struct{}) {
for k, vv := range src {
if _, denied := denylist[k]; denied {
continue
}
for _, v := range vv {
dst.Add(k, v)
}
}
}
func setRequestHeaders(c *touka.Context, req *http.Request, cfg *config.Config, matcher string) {
if matcher == "raw" && cfg.Httpc.UseCustomRawHeaders {
// 使用预定义Header
@ -67,14 +78,8 @@ func setRequestHeaders(c *touka.Context, req *http.Request, cfg *config.Config,
req.Header.Set(key, value)
}
} else if matcher == "clone" {
copyHeader(req.Header, c.Request.Header)
for key := range cloneHeadersToRemove {
req.Header.Del(key)
}
copyHeaderFiltered(req.Header, c.Request.Header, cloneHeadersToRemove)
} else {
copyHeader(req.Header, c.Request.Header)
for key := range reqHeadersToRemove {
req.Header.Del(key)
}
copyHeaderFiltered(req.Header, c.Request.Header, reqHeadersToRemove)
}
}