开源项目 gem rails-cache_control - 自动给 HTTP 请求加上前端缓存,以大幅提高加载速度

swordray · 2014年02月27日 · 最后由 swordray 回复于 2014年03月02日 · 3727 次阅读

Rails 的 caches_action :action, expires_in: Config.expires_in 会添加 HTTP headers ETag 和 Last-modified,这样客户端再次访问时只返回 0KB 的 304 Not Modified。这很好,但是还想更完美(处女座?),添加 Cache-control 之后客户端就完全不会重复发出网络请求,而是直接使用本地缓存,速度更快,体验与本地程序一样。

示例

http://www.shuhai.org/categories/2/

Cache-Control: max-age=86400, public

项目

https://github.com/swordray/rails-cache_control

Gem Version Build Status Dependency Status Code Climate

欢迎 Star, Issue, Fork

致谢

感谢优众网技术团队 [北京] 奢侈品 B2C 优众网招聘 Ruby / JavaScript / HTML5 / 全栈 工程师 10 位

不去请求,缓存更新怎么办?必须等过期吗?

#1 楼 @zgm 凡事都有代价,适合 1、对缓存主动更新要求不高 2、时间不是很长。例如 书海 内容基本不变,目前也只设了 1.day;电商 优众 就不适用了

没什么不叫rails-cache-controlrails_cache_control呢? rails-cache_control这名字看得我好纠结

#3 楼 @miclle

规范命名方法,例如 actionpack-action_caching

Rails 本来不就有设置 Expire 头的功能?

#6 楼 @edokeh

要写在 action 里面,和 caches_action expires_in 的声明式写法完全不同,也不是关联的,估计很少有人注意到

#1 楼 @zgm 可以看看 Etag 的解释

#8 楼 @huacnlee 看过的 怎么了?

#8 楼 @huacnlee 使用 Etag 做客户端缓存是需要发送请求检查资源是否更新的,但是楼主说他让客户端不发送请求检查资源是否更新,那要想更新客户端内容必须要等缓存过期了。

哪里理解不对吗?

#10 楼 @zgm 是我搞错了 😄 , 我晚我本来打算说靠 Etag 的方式是可以解决的(但是今天我确定了一下,好像是不可以的,只有靠浏览器刷新才能重新获取),当时手机上面回复,所有没写太细,不好意思

#11 楼 @huacnlee Etag 和 Last-modified 基本一样,只不过一个记哈希,一个记时间

需要 登录 后方可回复, 如果你还没有账号请 注册新账号