如何在ruby中缓存Haml模板
我正在用ruby编写一个简单的web框架。我正在使用渲染我的模板如何在ruby中缓存Haml模板,ruby,templates,caching,haml,Ruby,Templates,Caching,Haml,我正在用ruby编写一个简单的web框架。我正在使用渲染我的模板 renderer = Haml::Engine.new(template_path, ...) html_output = renderer.render(Object.new, params) 但这只提供了最后一次呈现的html输出。假设我有这样的观点 -if title.include? 'Admin Page' =title -else %a Test 在每个请求中,它都会重新呈现模板的html部分。是否
renderer = Haml::Engine.new(template_path, ...)
html_output = renderer.render(Object.new, params)
但这只提供了最后一次呈现的html输出。假设我有这样的观点
-if title.include? 'Admin Page'
=title
-else
%a
Test
在每个请求中,它都会重新呈现模板的html部分。是否有任何方法可以获取此模板的可缓存版本以供生产使用,从而避免重新渲染。缓存纯html在这里是不够的,因为标题可能会在请求中更改
首先,我认为这是不可能的,因为结果文件必须是ruby文件,并且看起来像这样
output = ''
if title.include? 'Admin Page'
output << title
else
output << '<a>Test</a>'
end
output=''
如果是title.include?”管理页面'
输出
在一次搜索之后,我读到可以缓存Haml文件,但我不知道如何实现这一点
我不知道你读到了什么,但我不认为这意味着你认为这意味着什么
- 您可以读取(并缓存)
.haml
模板代码
- 您可以使用
Haml
引擎解析模板代码,以便它准备好渲染,并缓存该结果,以便您可以在一组新变量上重复运行模板并获得不同的输出
- 而且,正如您所建议的,您可以缓存一组特定变量的HTML结果,这样,如果您已经看到了正确的结果,就不需要运行模板
但是,除非您使用自己的缓存系统将多个模板链接在一起,否则您无法按照您的建议在更改其他部分的同时使用结果HTML输出的Haml缓存部分。我使用Tilt的cache mechanizm解决了这一问题
require 'tilt'
cache = Tilt::Cache.new
cache.fetch(path_of_your_file, Tilt.new(path_of_your_file,options))
此代码将缓存倾斜对象,该对象包含haml文件的解析版本。在我的代码缓存中,key是文件的路径,你可以给它任何你想要的
例如,在开发模式中,我使用的是[path\u of_file,mtime\u of_file]
,因此每当我修改haml文件时,该文件的缓存都会更新。请详细说明您的问题。提供一个示例Haml模板,以及使用它的两个或三个调用,以及希望缓存哪些部分,哪些部分必须重新计算。