ruby-on-rails - 片段缓存和用户头像/图像

标签 ruby-on-rails ruby-on-rails-3 caching gravatar

我们在我们的网站上使用 Gravatar,但我们希望让用户直接上传他们的个人资料图片,以努力改善用户体验,类似于 Stackexchange has been doing。 .

在我们的网站上,用户可以相互关注、评论、“点赞”并以直接或间接生成内容的方式进行互动。 这意味着带有用户头像的缓存片段散布在各处,我们无法找到一种合理的方法使其无效而不会对渲染性能产生负面影响。

以下是我们研究过的可能解决方案:

选项 1) 采用 Gravatar 方法并设置非常短的 Expires/Cache-Control max-age header 并回收相同的图像文件名。

选项 2) 为所有用户使用占位符图像,其数据属性包含由 JavaScript 读取的用户 ID,并用于发出第二个 Ajax 请求,要求服务器提供最新数据头像。

有没有更好的办法解决这个问题?我们是否忽略了什么?

最佳答案

我想我理解你的问题,但我不确定我是否理解选项 2 作为解决方案,这可能表明它不是一个很好的解决方案。如果是我,我会在顶级缓存键中缓存用户 gravatar 周围的 html,它正在被重用,由用户 id 键入。即

<% cache("user_#{user.id}_profile_image") do %>
  <img src="blahblahblah or gravatar helper code or whatev">
<% end %>

如果您担心用户上传了 gravatar,并随后拥有缓存的默认 gravatar 图片,我认为您最好的选择是:

1) 在您发送给他们上传头像的用户配置文件区域中,有一个刷新链接指向刷新操作,该操作实际上使该用户缓存片段无效。即

expire_fragment "user_#{user.id}_profile_image"

( http://guides.rubyonrails.org/caching_with_rails.html )

2) 你可以不使用默认的 gravatar 重定向来上传图片,你可以拦截点击,将它发送到你自己的 Controller ,安排一个后台任务在 15 分钟左右运行,然后渲染一个 javascript将他们重定向到实际的 gravatar 页面以上传他们的图片的响应。后台工作人员将在稍后运行时清除该片段。这假设他们实际上上传了他们的图片并且我会说这是一个糟糕的主意。

但老实说,我不确定您为什么担心一开始就缓存 gravatar。它正在攻击 gravatars 服务器,因此它不会在您的服务器上造成任何负载,您自己存储它似乎有点 self 挫败到使用 gravatar 的地步。希望您的问题更简单(并且只是:当用户上传自己的图像时如何清除默认缓存的 gravatar 图像),这可以通过 #1 解决),这将允许您使缓存的 gravatar 图像过期并使用您自己的图像重新缓存图像,在用户上传他们的图像之后。 (下次呈现页面时会重新缓存图像,因为您会有一些逻辑,例如:

<% cache("user_#{user.id}_profile_image") do %>
  <% if user.has_uploaded_image? %>
     <%= display_profile_image %>
  <% else %>
    <%= display_gravatar_image %>
  <% end %>
<% end %>

关于ruby-on-rails - 片段缓存和用户头像/图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583504/

相关文章:

ruby-on-rails - 与 MRI Ruby 的并发请求

javascript - 使用 AJAX 的数据表 - 如何与特定页面共享 URL?

ruby-on-rails-3 - 如果作为 war 捆绑,Rails 3 将其公共(public)文件保存在哪里?

ruby-on-rails - 那会是什么关系呢?

c# - StackExchange.Redis 与 Azure Redis 速度慢得无法使用或引发超时错误

java - Java中如何控制资源的缓存?

php 缓存或任何可以减少页面刷新时数据库查询的东西

ruby-on-rails - 在 Capybara 的多个场景中重用 Factory_Girl 生成的列表

ruby-on-rails - 更新 gem 后出现 Rails 错误

ruby-on-rails - Capybara 的 stub 浏览器时间和时区