我在我的学习应用中写了一个gravatar助手。 Users#index动作会列出所有使用其gravatars的用户,即使使用分页也可能需要一段时间。有没有办法在Rails 3.2中缓存gravatars,记住以下几点:
不缓存用户页面本身;实际上,我只是想要自己缓存图像,而无需再次从gravatar.com抓取它们。
def gravatar_for(user, options = { size: 50 })
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
size = options[:size]
gravatar_url = "http://gravatar.com/avatar/#{gravatar_id}.png?s=#{size}"
image_tag(gravatar_url, alt: user.name)
end
答案 0 :(得分:2)
我的问题是你为什么需要这个?您正在从外部服务器和用户浏览器放置图像,gravatar.com必须缓存它。这就是为什么gravatar存在的原因,因为管理头像没有开发人员的任何工作。如果您需要缓存gravatars,那么为什么你真的需要它呢?
答案 1 :(得分:2)
如果您查看源代码,您会看到SO不执行自己的gravatar缓存。刷新页面几次,您可能会看到gravatars仍然是最后加载的元素。
您可以采取的一些措施来提高绩效:
答案 2 :(得分:1)
缓存整个用户页面或片段缓存图片网址无论如何都不会产生任何影响,因为图片仍将从Gravatar下载。 Gravatar将他们的Cache-Control
标题设置为最长5分钟,并且您无法做到这一点。
一种可能性是将图像保存到您可以控制响应标题的另一个位置。
在开发过程中你可以做的一件小事就是不要在页面上使用硬刷新。在某些浏览器中CMD/CTRL + R
或按下刷新按钮会发送带Cache-Control:max-age=0
的请求标头,这会导致您重新下载所有图像。您只需再次访问该页面即可进行软刷新(例如:按地址栏中的URL输入),它将不会发送该标题。