Performance improvement
- Reduces number of allocations per context - Improves CPU cache usage
This commit is contained in:
parent
184a02ee2d
commit
48f4914165
@ -54,6 +54,7 @@ func (a errorMsgs) String() string {
|
||||
// Context is the most important part of gin. It allows us to pass variables between middleware,
|
||||
// manage the flow, validate the JSON of a request and render a JSON response for example.
|
||||
type Context struct {
|
||||
writermem responseWriter
|
||||
Request *http.Request
|
||||
Writer ResponseWriter
|
||||
Keys map[string]interface{}
|
||||
@ -70,7 +71,8 @@ type Context struct {
|
||||
|
||||
func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, params httprouter.Params, handlers []HandlerFunc) *Context {
|
||||
c := engine.cache.Get().(*Context)
|
||||
c.Writer.reset(w)
|
||||
c.writermem.reset(w)
|
||||
|
||||
c.Request = req
|
||||
c.Params = params
|
||||
c.handlers = handlers
|
||||
|
4
gin.go
4
gin.go
@ -60,7 +60,9 @@ func New() *Engine {
|
||||
engine.router = httprouter.New()
|
||||
engine.router.NotFound = engine.handle404
|
||||
engine.cache.New = func() interface{} {
|
||||
return &Context{Engine: engine, Writer: &responseWriter{}}
|
||||
c := &Context{Engine: engine}
|
||||
c.Writer = &c.writermem
|
||||
return c
|
||||
}
|
||||
return engine
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ type (
|
||||
Written() bool
|
||||
|
||||
// private
|
||||
reset(http.ResponseWriter)
|
||||
setStatus(int)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user