Некоторые вопросы, касающиеся модулей Mako, функции TemplateLookup Mako и Pyramid - PullRequest
7 голосов
/ 27 января 2012

Я просматриваю документацию Mako и обнаружил функцию TemplateLookup для Mako: Использование TemplateLookup .Однако я никогда не видел этого в документации Pyramid, так как мне никогда не приходилось указывать каталог модулей.Мои вопросы:

  1. Какие "модули" созданы?Это как скомпилированные файлы .pyc?
  2. Будет ли использование TemplateLookup по сравнению с render () или render_to_response () Pyramid ускорять создание шаблонов?
  3. По умолчанию Pyramid создает эти модули, но скрыты там, где пользователь не видит?
  4. Из документации написано, что эти модули кэшируются в памяти.Чем это отличается от кэширования через Beaker?

Поскольку все на моем сайте является динамическим контентом (за исключением нижнего колонтитула, в основном), я хочу найти лучший способ кэширования моих шаблонов или ускорениярендеринг, и это выглядит как простой способ ускорить рендеринг, если он вообще это делает.

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Ниже приведены некоторые ответы на ваши вопросы:

  1. Для каждого вашего шаблона создан модуль python (.py), который содержит код, необходимый для визуализации шаблона.Это просто оптимизированная версия шаблона, которую можно легко выполнить из python.Когда этот модуль выполняется, файл .pyc также создается.Чтобы проверить это, вы можете выполнить следующий эксперимент:

    from mako.template import Template
    Template(filename='template.mako', module_directory='.')
    

    Предполагая, что template.mako существует, вы увидите, что template.mako.py и template.mako.pyc созданы.

  2. Глядя на pyramid.mako_templating.MakoLookupRenderer.__call__ Я вижу, что метод, используемый для рендеринга шаблона мако в пирамиде, уже использует объект TemplateLookup, поэтому никакой разницы не будет.

  3. В pyramid.mako_templating.renderer_factory я вижу, что есть настройка под названием mako.module_directory.Это, вместе с другими подобными настройками, может использоваться для управления поведением библиотеки mako для создания файлов модулей.Похоже, что поведение по умолчанию - не создавать эти файлы (mako.module_directory - это None по умолчанию), но вы, безусловно, можете делать все, что вам нужно.

  4. В TemplateLookupувидеть параметр с именем cache_impl, который по умолчанию установлен на beaker, поэтому я думаю, что никакой разницы нет.

3 голосов
/ 06 января 2013

См. Ответ Джколладо на первые три вопроса. На вопрос 4:

Из документации написано, что эти модули кэшируются в памяти. Чем это отличается от кэширования через Beaker?

Они кешируют две разные вещи. Кеширование стакана (или что-то еще, что вы установили в cache_impl) кэширует отображаемый вывод Если вы установите module_directory, модули Python, скомпилированные из файлов mako, будут сохранены здесь. Картинка может объяснить это лучше:

                                                    context variables
                                                            |
                                                            v
              Template()                                 render()
.mako file  ------------->  python module (.py, .pyc)  ----------->  output
                                       :                                :
                                       |                                |
                                   cached in                         cached
                               module_directory                    via Beaker
...