蜻蜓飞拇指,服务器端缓存?

Dragonfly on the fly thumbs, server side cache?

我正在使用 dragonfly 即时生成缩略图,但我注意到它们是在每次重新加载单个页面时生成的,这并不好。阅读蜻蜓文档我发现建议添加 rack-cache gem,但是 gem 的文档说:

produce freshness (Expires, Cache-Control) and/or validation (Last-Modified, ETag)

所以,这依赖于客户端中的缓存,这对我来说是无意义的。如果我有数千次访问,我不想为每个访问生成缩略图,而只是依赖于每个访问都有一个缓存副本这一事实。

我想在服务器端实现某种缓存,避免 DragonFly 在已经存在该尺寸的文件时再次生成它。

您是正确的,因为仅向客户端发送 ETag 和缓存控制 headers 的用处不大。

什么 the author is talking about 使用像 SquidVarnishRack::Cache 这样的反向代理,它充当客户端和您的 rails 应用程序之间的中间人- 因此,当客户端请求 /my/stored/image/300x300.jpg 时,反向代理将简单地静态提供资产,而不会请求访问您的 Rails 应用程序(除非缓存已过时)。

您可以将 Dragonfly 设置为使用文件存储 - 但它的性能不如反向代理:

datastore :file,
  # directory under which to store files
  root_path: 'public/dragonfly',    
  # - defaults to 'dragonfly' relative to current dir
  # root for urls when serving directly from datastore using remote_url
  server_root: 'public'