Skip to content

缓存模板

上一篇文中的代码里面有一个严重拖慢性能的地方——每次渲染页面都需要重新解析模板。

我们可以直接将解析结果保存在一个全局变量里,也就是缓存起来。

函数 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)
    }
}