缓存模板
上一篇文中的代码里面有一个严重拖慢性能的地方——每次渲染页面都需要重新解析模板。
我们可以直接将解析结果保存在一个全局变量里,也就是缓存起来。
函数 template.Must 是一个便捷封装:当传入的 error 值不是 nil 时会 panic,否则会原样返回 *Template 。
改动如下:
go
// 添加全局变量
var templates = template.Must(template.ParseFiles("edit.html", "view.html"))
// 修改渲染函数,减少了特别多的代码
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
err := templates.ExecuteTemplate(w, tmpl+".html", p)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}