问题标签 [fragment-caching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
351 浏览

ruby-on-rails - Rails 片段缓存和时间戳显示

我正在开发一个社交网络,比如基于体育的 Twitter 和 Facebook 的混合体。我有一个名为 Post(id、user_id、receiver_id、message、created_at)的模型,我想缓存 Post 视图。

应用程序/视图/帖子/_post.haml

昨天一切正常,但是当我访问我的“主页”时,我意识到时间戳已被缓存。让我给你看一个例子:

问题是它不应该显示“不到一分钟前”,而应该显示“昨天”。有没有办法不缓存时间戳?你有什么建议来解决这个问题?

我想通过 AJAX 调用来获取时间戳,但这很奇怪而且不好。

0 投票
2 回答
270 浏览

ruby-on-rails-3 - 某些字段在 Rails 的片段缓存中获取旧值

我有一个视图来显示保存在数据库中的资源的详细信息。一些细节属于 Resource 模型本身,一些细节属于关联模型。

在视图中,我使用片段缓存来获取详细信息。

当用户按下视图上的按钮时,视图的一部分将被表单替换,因此用户可以在不加载新页面的情况下编辑详细信息。打开表单时,缓存已过期(实际上是,我已经检查过)。当用户提交表单 ( using :remote => true) 时,表单被隐藏,并且使用 jQuery 重新加载原始内容并呈现部分内容。

到目前为止,一切正常。原始内容使用新值正确重新加载,来自内部代码<% cache ... do %><% end %>.

奇怪的是,当我重新加载页面时,一些新值消失了。而是显示一些旧值(那些应该在最后一次提交后被缓存的值)。更奇怪的是,一些值被更新了,即使它们与错误值在同一个新缓存文件中。

据我所知,关联模型中的值是正确的,而 Resource 模型中的值是错误的(旧的)。我一直在想是不是跟sql缓存有关系,但我觉得不是这样,因为我觉得重载页面的时候应该清空sql缓存。

如果我打开表单并再次提交,数据就会更新,一切都很好。那就是上次提交的数据正在进入缓存。如果我在提交之前更改了表单中的数据,它仍然是缓存文件中包含的上次提交的数据。因此,即使其他字段已正确更新,似乎为 Resource 模型提交的数据也会被一次提交延迟。

如果我在 development.rb 中关闭缓存,一切都会按预期进行。每次更新所有数据。

顺便说一句,我确实在我的服务器上遇到了同样的问题。

任何有线索的人?

0 投票
3 回答
1487 浏览

ruby-on-rails - 如果 Rails 4.0 中没有父模型,如何处理基于键的集合过期?

由于动作和页面缓存以及清扫器将从 Rails 4.0 中删除,我开始cache_digests在我的 Rails 3.2 应用程序中使用,因为我正遭受整个手动过期的噩梦。

但即使在阅读了一些教程(如何基于键的缓存过期工作缓存摘要#387 缓存摘要、...)之后,我也找不到一种好方法来处理没有可以提供时间戳的父对象的视图或类似的东西。

例如,如果DocumentTodolist使用关联touch上的选项,这可以完美地工作。Project

但是index行动呢?

当然,我可以使用任意密钥project_index,例如在项目模型发生任何更改时使其过期,但这需要清扫者或观察者并摆脱它们,包括显式过期是基于密钥过期的主要原因之一。

Rails 4.0的方法是什么?

0 投票
1 回答
323 浏览

ruby-on-rails - 在 Rails 中手动填充缓存

在 Rails 3.x 中,我想手动预编译我的缓存,并在模型实例和静态 HTML 的视图中使用片段缓存。

当页面被请求时,Rails 会延迟填充缓存,这会导致第一次加载时加载时间变慢。

所以给出这个示例代码:

如何使用 Ruby 手动填充缓存?

0 投票
1 回答
114 浏览

ruby-on-rails - 在 Rails 片段缓存工作的情况下,为什么 SELECT 语句会出现在缓存片段内的日志中?

我刚刚使用 memcachier 和 dalli 在 Heroku 上托管的网站上设置了 memcached。我已将主页包装在片段缓存块中。在我的日志中,我可以看到片段正在被缓存并正确读取,并且我已经发现负载测试的结果有了很大的改善。但我想知道为什么我仍然看到所有这些模型查找发生。我的理解是,我应该可以完全避免数据库之行。我的日志中的“国家负载”语句是否仅表示从缓存中加载模型?或者我可以通过改变缓存的方式来避免它们吗?

谢谢你的帮助!

0 投票
2 回答
2648 浏览

ruby-on-rails - 使用 has_many 关系为俄罗斯娃娃缓存构建 Rails 应用程序

在研究了 DHH 和其他关于基于键的缓存过期和俄罗斯娃娃缓存的博客文章之后,我仍然不确定如何处理一种关系类型。具体来说,是一种has_many关系。

我将在示例应用程序上分享我的研究结果。这是一个小故事,所以请稍等。假设我们有以下 ActiveRecord 模型。我们只关心模型的适当更改cache_key,对吗?

我们已经有一篇文章,有一条评论。两者都出自不同的作者。目标是cache_key在以下情况下对文章进行更改:

  1. 文章的正文或标题更改
  2. 其评论的正文发生了变化
  3. 文章作者姓名变更
  4. 文章评论作者姓名变更

所以默认情况下,我们适用于案例 1 和 2。

但不适用于案例 3。

让我们cache_keyArticle.

赢!但这当然不适用于案例 4。

那么还有哪些选择呢?我们可以对 上的has_many关联做一些事情Author,但has_many没有{touch: true}选择,可能是有原因的。我想它可以按照以下方式实现。

虽然这确实有效。它通过加载、实例化和更新每篇文章和另一篇文章的评论,对性能产生巨大影响。我不相信这是一个正确的解决方案,但什么是?

当然 37signals 用例/示例可能会有所不同:project -> todolist -> todo. 但我想象一个单一的待办事项也属于用户。

如何解决这个缓存问题?

0 投票
2 回答
527 浏览

ruby-on-rails - 如何使用俄罗斯娃娃缓存保持缓存温暖?

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

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

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

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

有任何想法吗?

0 投票
1 回答
138 浏览

ruby-on-rails-3 - Rails:缓存清扫器和过期片段

我有一个管理员可以创建新用户的表单,在这个表单中有一个remote: true. 成功创建用户后,页面上显示所有用户的部分将更新。这在生产中没有发生,因为我打开了缓存......

创建.js.erb:

用户扫地:

在生产$('.<%= type %>-container').html("<%= j render \"school_admin/#{type}/all\", users: @users.in_groups_of(3, false) %>")中这不起作用,因为我在视图中有以下缓存片段:

应用程序.rb

还有其他人遇到这个问题吗?

0 投票
1 回答
73 浏览

ruby-on-rails - Rails:试图了解如何更好地进行片段缓存

在我的应用程序中,我试图合并更好的片段缓存。

像这样调用片段是否是最佳实践:

0 投票
2 回答
405 浏览

ruby-on-rails - Rails 片段缓存:100K+ 片段会降低性能吗?

我有一个包含大量数据的网站,我正在对所有页面进行“俄罗斯娃娃”缓存,如下所示:

这将产生数十万个碎片。

1. /tmp/cache 目录中有这么多片段文件,这会降低性能吗?

2. rail 会自动删除过期的旧碎片吗?

PS。该站点驻留在具有 4GB 内存的单个 Ubuntu 服务器上。它没有使用 memcached 作为缓存存储,只是使用 rails 开箱即用的基于标准文件的实现。