Utilize bytebufferpool for Render

pull/451/head
Alexander Do 2020-06-07 11:05:00 -07:00
parent 6e22a75e91
commit 6da47d4295
No known key found for this signature in database
GPG Key ID: BB3CAAACFB6F4A4B
1 changed files with 16 additions and 1 deletions

17
ctx.go
View File

@ -16,6 +16,7 @@ import (
"mime/multipart" "mime/multipart"
"net/http" "net/http"
"net/url" "net/url"
"os"
"path/filepath" "path/filepath"
"regexp" "regexp"
"strconv" "strconv"
@ -750,10 +751,24 @@ func (ctx *Ctx) Render(name string, bind interface{}) (err error) {
} }
} else { } else {
// Render raw template using 'name' as filepath if no engine is set // Render raw template using 'name' as filepath if no engine is set
tmpl, err := template.ParseFiles(filepath.Clean(name)) var tmpl *template.Template
raw := bytebufferpool.Get()
defer bytebufferpool.Put(raw)
// Read file
f, err := os.Open(filepath.Clean(name))
if err != nil { if err != nil {
return err return err
} }
if _, err = raw.ReadFrom(f); err != nil {
return err
}
if err = f.Close(); err != nil {
return err
}
// Parse template
if tmpl, err = template.New("").Parse(raw.String()); err != nil {
return err
}
// Render template // Render template
if err = tmpl.Execute(buf, bind); err != nil { if err = tmpl.Execute(buf, bind); err != nil {
return err return err