v3: Improve and simplify logic of ctx.Next() (#3063)

* Simplify Next() handler in Ctx

* Add comments
pull/3066/head
Juan Calderon-Perez 2024-07-05 10:31:50 -04:00 committed by GitHub
parent dfdf9647e1
commit c579a1a0b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 9 deletions

19
ctx.go
View File

@ -1023,19 +1023,20 @@ func (c *DefaultCtx) ClientHelloInfo() *tls.ClientHelloInfo {
func (c *DefaultCtx) Next() error {
// Increment handler index
c.indexHandler++
var err error
// Did we execute all route handlers?
if c.indexHandler < len(c.route.Handlers) {
// Continue route stack
err = c.route.Handlers[c.indexHandler](c)
} else {
// Continue handler stack
if c.app.newCtxFunc != nil {
_, err = c.app.nextCustom(c)
} else {
_, err = c.app.next(c)
}
return c.route.Handlers[c.indexHandler](c)
}
// Continue handler stack
if c.app.newCtxFunc != nil {
_, err := c.app.nextCustom(c)
return err
}
_, err := c.app.next(c)
return err
}

View File

@ -542,6 +542,27 @@ func Benchmark_Router_Next(b *testing.B) {
require.Equal(b, 4, c.indexRoute)
}
// go test -v ./... -run=^$ -bench=Benchmark_Router_Next_Default -benchmem -count=4
func Benchmark_Router_Next_Default(b *testing.B) {
app := New()
app.Get("/", func(_ Ctx) error {
return nil
})
h := app.Handler()
fctx := &fasthttp.RequestCtx{}
fctx.Request.Header.SetMethod(MethodGet)
fctx.Request.SetRequestURI("/")
b.ReportAllocs()
b.ResetTimer()
for n := 0; n < b.N; n++ {
h(fctx)
}
}
// go test -v ./... -run=^$ -bench=Benchmark_Route_Match -benchmem -count=4
func Benchmark_Route_Match(b *testing.B) {
var match bool