c.String() performance improvements

```
benchmark                   old ns/op     new ns/op     delta
BenchmarkOneRouteString     448           310           -30.80%

benchmark                   old allocs     new allocs     delta
BenchmarkOneRouteString     1              0              -100.00%

benchmark                   old bytes     new bytes     delta
BenchmarkOneRouteString     48            0             -100.00%
```
This commit is contained in:
Manu Mtz-Almeida 2015-06-04 12:53:42 +02:00
parent 7186200309
commit 56683d33b1
2 changed files with 10 additions and 8 deletions

View File

@ -320,10 +320,8 @@ func (c *Context) XML(code int, obj interface{}) {
// Writes the given string into the response body. // Writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) { func (c *Context) String(code int, format string, values ...interface{}) {
c.Render(code, render.String{ c.writermem.WriteHeader(code)
Format: format, render.WriteString(c.Writer, format, values)
Data: values},
)
} }
// Returns a HTTP redirect to the specific location. // Returns a HTTP redirect to the specific location.

View File

@ -18,14 +18,18 @@ type String struct {
var plainContentType = []string{"text/plain; charset=utf-8"} var plainContentType = []string{"text/plain; charset=utf-8"}
func (r String) Render(w http.ResponseWriter) error { func (r String) Render(w http.ResponseWriter) error {
WriteString(w, r.Format, r.Data)
return nil
}
func WriteString(w http.ResponseWriter, format string, data []interface{}) {
header := w.Header() header := w.Header()
if _, exist := header["Content-Type"]; !exist { if _, exist := header["Content-Type"]; !exist {
header["Content-Type"] = plainContentType header["Content-Type"] = plainContentType
} }
if len(r.Data) > 0 { if len(data) > 0 {
fmt.Fprintf(w, r.Format, r.Data...) fmt.Fprintf(w, format, data...)
} else { } else {
io.WriteString(w, r.Format) io.WriteString(w, format)
} }
return nil
} }