2

我一直在 Rails 应用程序上试验俄罗斯娃娃片段缓存,更具体地说是在它的主仪表板页面上。这是用户登录后看到的第一页,是俄罗斯娃娃的绝佳候选者,因为它包含许多嵌套元素。

缓存在用户自己进行更改需要应用程序重新渲染仪表板的情况下运行良好。使用缓存的加载时间比渲染整个页面快 4 倍。

但是,存在数据被系统更改的情况。例如,每天晚上,我们都会根据前一天的新汇率更新所有值。这将自动使仪表板中的大部分片段过期,并且第二天早上用户登录时将遇到冷缓存。

是否可以在系统更新后重新生成这些片段缓存以使其保持温暖?我想我可以write在任何系统更新后手动处理这些片段,但我也必须手动管理密钥和依赖项。(我目前正在使用cache_digestgem,非常方便。)。

有任何想法吗?

4

2 回答 2

1

如果它是您的一个选项,那么您可以将计算所需的所有数据包含在 data- 属性中,然后使用 Javascript 将其转换为文本。

所以你的原始输出可能是:

<li data-gbp-amount="2.50"></li>

然后你和 JS 一起做类似的事情:

$(document).find("[data-gbp-amount]").each(index, el) ->
  $(el).text($(el).data("gbp-amount") * todaysExchangeRate)

这样一来,Rails 输出的所有内容都将被缓存,并且不会随汇率变化。

于 2013-04-30T17:08:38.420 回答
0

一切都取决于 cache_key。cache_key 基于模型 id、updated_at 属性和来自 html 模板的 md5。因此,如果您更改这 3 个密钥之一,那么您的缓存就会过期。

我不知道您的数据有多复杂,但您可以在主 AR::model 中使用 touch 方法来更改缓存键。也许你有一个主要的 AR::model,其他记录是依赖的。

于 2013-05-03T03:37:07.290 回答