gpt4 book ai didi

ruby-on-rails - 使用 stylesheet_link_tag 缓存 Rails 4 片段

转载 作者:行者123 更新时间:2023-12-04 08:48:38 24 4
gpt4 key购买 nike

Rails 4 使用 cache_digests ( https://github.com/rails/cache_digests ) 来帮助片段缓存失效:cache_digests 创建模板及其所有已知依赖项的 MD5 哈希,允许片段缓存通过在模板或其依赖项更改时分配新键而失效。

我的问题是:片段缓存是否会包装 stylesheet_link_tag如果 application.css 文件的 MD5 哈希值在 rake assets:precompile 期间发生更改,则无效?现在在我们的标题中执行此操作:

<% cache("header-cache-key") do %>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<% end %>

这安全吗?我担心的是,当 CSS 或 JS 发生变化时, application-xxxxxxx.css会变成 application-yyyyyyy.css ,但我们的 header 将与旧的 application-xxxxxxx.css 一起缓存.那么如果 application-xxxxxxx.csspublic/assets 消失了,这将导致一个丑陋的页面。

最佳答案

不,缓存不会在更改已编译的 CSS/JS 时被破坏/无效。

Rails 在代码更改时破坏缓存的方式是通过将文件的哈希插入 View 的缓存键来完成的。

例如,假设您在 app/views/layouts/application.html.erb 处有一个 View 文件. Rails 从文件的内容(即 HTML/Ruby 代码,而不是执行的输出)生成一个哈希值。让我们假设生成的哈希是“abdefg123”。

application.html.erb具有以下缓存代码:

<% cache("header-cache-key") do %>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<% end %>

生成的实际缓存键类似于 "views/layouts/application-abcdefg123/header-cache-key" .

由于已编译的 CSS/JS 中的更改实际上并未更改文件中的 Ruby/HTML,因此布局代码的计算哈希值不会更改,因此“header-cache-key”的缓存键是相同的,这意味着缓存没有被破坏。

关于ruby-on-rails - 使用 stylesheet_link_tag 缓存 Rails 4 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com