-
В процессе разработки, джанговский серверчик следит за обновлениями файлов и перезагружается, дабы быть актуальным. В продакшене такого конечно же нет. Так и есть с большинством кода, за исключением шаблонов. Т.е подсунув проекту запущеному через fcgi+nginx, новый файл шаблона, при следующем запросе, шаблон подхватывается.
Вопрос: зачем django загружает шаблон с диска на каждый запрос? Мне это нисколько не мешает, даже удобно, однако зная как при проектировании джанги все тщательно обдумывается, мне интересно чем вызвано подобное решение?
Я понимаю, что шаблон можно закешировать и проблем не будет, но не понимаю, почему по умолчанию было выбранно именно такое поведение.
Спасибо. -
Думаю при частом обращении к файлу его просто закеширует ОС и чтения с диска каждый раз происходить не будет.
-
Неизвестная ОС? Врядли разработчики завязываются на что-то кроме питона веб-стандартов.
Я понимаю, что шаблон можно закешировать и проблем не будет
Закешировать куда? Шаблонов может быть очень много. Оставлять все использованные шаблоны в памяти?
-
Вопрос: зачем django загружает шаблон с диска на каждый запрос? Мне это нисколько не мешает, даже удобно, однако зная как при проектировании джанги все тщательно обдумывается, мне интересно чем вызвано подобное решение?
Не найду оригинального ответа разработчиков, воспроизведу по памяти.
Оно таким принято именно потому, что большинству нисколько не мешает. Этот вопрос поднимался несколько раз, и было решено, что переделывать движок шаблонов так глубоко слишком сложно относительно получаемой выгоды. Плюс, отсутствие необходимости рестартовать сервер при изменениях шаблонов — это своего рода фича.
Впрочем, бывают случаи, когда недостаточная скорость джанговских шаблоны действительно влияет на общую производителность. В этом случае обычно рекомендуется подобрать другой шаблонный движок.
-
Если мешает только постоянная подгрузка из файлов, зачем же менять двиг? Достаточно загрузить шаблон в глобальную переменную и юзать её потом:
tpl = Template(open('template.html').read()) ... def my_view: ... return tpl.render(Context(local())) -
Да, правда. Просто обычно людей ещё и скорость рендеринга перестаёт устраивать :-)
-
Закешировать куда? Шаблонов может быть очень много.
Оставлять все использованные шаблоны в памяти?
Это уже проблемы другого рода.
Вопрос был не в том, что с этим делать, а почему это так. Текущее поведение совершенно не проблема, так что спасибо Ивану (как всегда), за точный и исчерпывающий ответ! -
Впрочем, бывают случаи, когда недостаточная скорость джанговских шаблоны действительно влияет на общую производителность. В этом случае обычно рекомендуется подобрать другой шаблонный движок.
А почему написание кэширующего загрузчика шаблонов не решит эту проблему?
-
А почему написание кэширующего загрузчика шаблонов не решит эту проблему?
Потому что работа шаблонной подсистемы не заканчивается компиляцией...
-
А почему написание кэширующего загрузчика шаблонов не решит эту проблему?
Потому что узкое место не в чтении шаблонов с диска и их компиляция, а генерация из них HTML-страниц.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.





