Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中缓存Haml模板_Ruby_Templates_Caching_Haml - Fatal编程技术网

如何在ruby中缓存Haml模板

如何在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部分。是否

我正在用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部分。是否有任何方法可以获取此模板的可缓存版本以供生产使用,从而避免重新渲染。缓存纯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模板,以及使用它的两个或三个调用,以及希望缓存哪些部分,哪些部分必须重新计算。