вторник, 5 февраля 2019 г.

Веб-приложение на Go: кэширование шаблонов

Код нашего приложения неэффективен: renderTemplate вызывает ParseFiles каждый раз, когда страница отображается. Лучшим подходом будет вызвать ParseFiles один раз в инициализации программы, сложить все шаблоны в один *Template. Тогда мы можем использовать метод ExecuteTemplate для визуализации конкретного шаблона.

Сначала мы создаем глобальную переменную с именем templates и инициализируем ее с ParseFiles.

var templates = template.Must(
                        template.ParseFiles("edit.html", 
                                            "view.html"))

Функция template.Must - это удобная оболочка, которая паникует когда передано ненулевое значение error, а в противном случае возвращает *Template без изменений. Здесь уместна паника; если шаблоны не могут быть загружены, единственное разумное, что нужно сделать, это выйти из программы.

Функция ParseFiles принимает любое количество строковых аргументов, которые идентифицируют наши файлы шаблонов и анализируют эти файлы в шаблоны, которые названы в честь базового имени файла. Если бы мы добавили больше шаблонов в нашу программу, мы бы добавили их имена к аргументам вызова ParseFiles.

Затем мы модифицируем функцию renderTemplate для вызова метода templates.ExecuteTemplate с именем соответствующего шаблона:

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

Обратите внимание, что имя шаблона является именем файла шаблона, поэтому мы должны добавить ".html" к аргументу tmpl.


Читайте также:


Комментариев нет:

Отправить комментарий