Explorar el Código

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%
```
Manu Mtz-Almeida hace 10 años
padre
commit
56683d33b1
Se han modificado 2 ficheros con 10 adiciones y 8 borrados
  1. 2 4
      context.go
  2. 8 4
      render/text.go

+ 2 - 4
context.go

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

+ 8 - 4
render/text.go

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