mirror of
https://github.com/WJQSERVER-STUDIO/ghproxy.git
synced 2026-06-13 23:57:37 +08:00
perf(proxy): reduce nest rewrite allocations
- Dispatch shell link rewriting between streaming and buffered paths based on response size - Reuse buffers and reduce URL construction allocations in proxy handlers - Add nest benchmarks and align extractParts compatibility expectations with the current contract
This commit is contained in:
parent
4c555ed50c
commit
e2719aa761
6 changed files with 248 additions and 88 deletions
63
proxy/nest_bench_test.go
Normal file
63
proxy/nest_bench_test.go
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
package proxy
|
||||
|
||||
import (
|
||||
"ghproxy/config"
|
||||
"io"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const benchmarkInput = `
|
||||
Some text here.
|
||||
Link to be replaced: http://github.com/user/repo
|
||||
Another link: https://google.com
|
||||
And one more: http://example.com/some/path
|
||||
This should not be replaced: notalink
|
||||
End of text.
|
||||
`
|
||||
|
||||
func BenchmarkProcessLinksStreaming(b *testing.B) {
|
||||
cfg := &config.Config{}
|
||||
host := "my-proxy.com"
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
b.StopTimer()
|
||||
input := io.NopCloser(strings.NewReader(benchmarkInput))
|
||||
b.StartTimer()
|
||||
|
||||
reader, _, err := processLinksStreamingInternal(input, host, cfg, nil)
|
||||
if err != nil {
|
||||
b.Fatalf("processLinksStreamingInternal failed: %v", err)
|
||||
}
|
||||
|
||||
if _, err = io.ReadAll(reader); err != nil {
|
||||
b.Fatalf("failed to read from processed reader: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkProcessLinksBuffered(b *testing.B) {
|
||||
cfg := &config.Config{}
|
||||
host := "my-proxy.com"
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
b.StopTimer()
|
||||
input := io.NopCloser(strings.NewReader(benchmarkInput))
|
||||
b.StartTimer()
|
||||
|
||||
reader, _, err := processLinksBufferedInternal(input, host, cfg, nil)
|
||||
if err != nil {
|
||||
b.Fatalf("processLinksBufferedInternal failed: %v", err)
|
||||
}
|
||||
|
||||
if _, err = io.ReadAll(reader); err != nil {
|
||||
b.Fatalf("failed to read from processed reader: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue