2015-01-16 4 views
2

Я пишу простой веб-фреймворк с рубином. Я делаю свои шаблоны сКак я могу кэшировать шаблоны Haml внутри ruby ​​

renderer = Haml::Engine.new(template_path, ...) 
html_output = renderer.render(Object.new, params) 

но это дает мне только последний отображаемый вывод html. Предположим, у меня есть вот так

-if title.include? 'Admin Page' 
    =title 
-else 
    %a 
    Test 

В каждом запросе он повторно отображает html-часть шаблона. Есть ли способ получить Cachable версию этого шаблона для производства, чтобы избавиться от повторной рендеринга. Кэшировать чистый html здесь недостаточно, потому что заголовок может меняться по запросу.

Во-первых, я думал, что это невозможно, потому что файл результата должен быть рубиновым и выглядеть следующим образом.

output = '' 
if title.include? 'Admin Page' 
    output << title 
else 
    output << '<a>Test</a>' 
end 

но после поиска я прочитал, что файлы Haml могут быть кэшированы, но я не могу понять, как этого добиться. Могу ли я кэшировать шаблоны Haml, если да, то как я могу это сделать? Является ли мой подход истинным в этой концепции или я что-то упускаю?

+0

Просьба уточнить ваш вопрос с подробной информацией. Предоставьте пример шаблона Haml и два или три вызова его использования, а также какие части, которые вы надеетесь кэшировать, и которые должны быть пересчитаны. – Phrogz

ответ

0

Я решил это с помощью механизма кеша Тилта.

require 'tilt' 
cache = Tilt::Cache.new 
cache.fetch(path_of_your_file, Tilt.new(path_of_your_file,options)) 

Этот код будет кэшировать объект Tilt, который включает в себя проанализированную версию вашего файла haml. В моем кеше кода кеша находится путь к файлу, вы можете дать ему все, что захотите.

Примерно в режиме разработки Я использую [path_of_file, mtime_of_file], поэтому кеш обновляется для этого файла всякий раз, когда я модифицировал файл haml.

0

после поиска я прочитал, что Haml файлы можно кэшировать, но я не могу понять, как достичь этого

Я не знаю, что вы читаете, но я не представляю что это означает, что вы думаете, что это значит.

  • Вы можете прочитать (и кеш) код шаблона .haml.
  • Вы можете проанализировать код шаблона с помощью двигателя Haml, чтобы он был готов к рендерингу, и кэш-результат, чтобы вы могли повторно запускать шаблон на новом наборе переменных и получать разные результаты.
  • И, как вы предлагаете, вы можете кэшировать результаты HTML для определенного набора переменных, так что вам не нужно запускать шаблон, если вы уже видели правильные результаты.

Но вы не можете делать то, что, по-вашему, предлагаете, - иметь части кэша Haml получаемого результата HTML при изменении других частей, если только вы не объединяете несколько шаблонов с их собственными системами кеширования.

Смежные вопросы