如何在 ruby 中缓存 Haml 模板
How can I cache Haml templates inside ruby
我正在使用 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
在每个请求中它是模板的 re-render html 部分。有什么方法可以获取此模板的可缓存版本以用于生产以摆脱 re-render。缓存纯 html 在这里是不够的,因为标题可能会在请求中改变。
首先我认为这是不可能的,因为结果文件必须是 ruby 文件并且看起来像这样。
output = ''
if title.include? 'Admin Page'
output << title
else
output << '<a>Test</a>'
end
但在搜索之后我了解到可以缓存 Haml 文件,但我不知道如何实现这一点。我可以缓存 Haml 模板吗?如果可以,我该怎么做?我的方法在这个概念上是正确的还是我遗漏了什么?
after a search I read that Haml files can be cached but I can't figure out how to achieve this
我不知道你读的是什么,但我不认为它意味着你认为的意思。
- 您可以读取(和缓存)
.haml
模板代码。
- 您可以使用
Haml
引擎解析模板代码,以便它可以呈现,并缓存该结果,以便您可以 运行 在一组新变量上重复使用模板并获得不同的输出。
- 而且,正如您所建议的,您可以缓存一组特定变量的 HTML 结果,这样您就不需要 运行 如果您已经看到正确的模板结果。
但是你不能按照你的建议去做——让 Haml 缓存结果 HTML 输出的一部分,同时改变其他部分——除非你将多个模板与它们自己的缓存系统链接在一起。
我用 Tilt 的缓存机制解决了这个问题。
require 'tilt'
cache = Tilt::Cache.new
cache.fetch(path_of_your_file, Tilt.new(path_of_your_file,options))
此代码将缓存 Tilt 对象,其中包含 haml 文件的已解析版本。在我的代码缓存中,key是文件的路径,你随便给。
例如,在开发模式下,我正在使用 [path_of_file, mtime_of_file]
,因此每当我修改 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
在每个请求中它是模板的 re-render html 部分。有什么方法可以获取此模板的可缓存版本以用于生产以摆脱 re-render。缓存纯 html 在这里是不够的,因为标题可能会在请求中改变。
首先我认为这是不可能的,因为结果文件必须是 ruby 文件并且看起来像这样。
output = ''
if title.include? 'Admin Page'
output << title
else
output << '<a>Test</a>'
end
但在搜索之后我了解到可以缓存 Haml 文件,但我不知道如何实现这一点。我可以缓存 Haml 模板吗?如果可以,我该怎么做?我的方法在这个概念上是正确的还是我遗漏了什么?
after a search I read that Haml files can be cached but I can't figure out how to achieve this
我不知道你读的是什么,但我不认为它意味着你认为的意思。
- 您可以读取(和缓存)
.haml
模板代码。 - 您可以使用
Haml
引擎解析模板代码,以便它可以呈现,并缓存该结果,以便您可以 运行 在一组新变量上重复使用模板并获得不同的输出。 - 而且,正如您所建议的,您可以缓存一组特定变量的 HTML 结果,这样您就不需要 运行 如果您已经看到正确的模板结果。
但是你不能按照你的建议去做——让 Haml 缓存结果 HTML 输出的一部分,同时改变其他部分——除非你将多个模板与它们自己的缓存系统链接在一起。
我用 Tilt 的缓存机制解决了这个问题。
require 'tilt'
cache = Tilt::Cache.new
cache.fetch(path_of_your_file, Tilt.new(path_of_your_file,options))
此代码将缓存 Tilt 对象,其中包含 haml 文件的已解析版本。在我的代码缓存中,key是文件的路径,你随便给。
例如,在开发模式下,我正在使用 [path_of_file, mtime_of_file]
,因此每当我修改 haml 文件时,都会为该文件更新缓存。