diff --git a/ctx.go b/ctx.go index 78eedc19..02cbd814 100644 --- a/ctx.go +++ b/ctx.go @@ -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 } diff --git a/router_test.go b/router_test.go index 57ce9209..715fbf76 100644 --- a/router_test.go +++ b/router_test.go @@ -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