Django 中对静态文件版本的控制
为了快速地响应用户的需求、满足运营活动的需要,互联网产品通常有着非常高的发布频率。采用敏捷开发的方式,缩短了交付的周期,加快了产品的迭代,也给项目的文件管理带来了挑战。前端工程直接面向用户,首当其冲,最值得重视。频繁更新的图片、样式、交互,不同的版本文件,怎样保证用户获取一个可预期的结果呢?本文正是从这个问题出发,讨论相关的解决方案。
1. 缓存方式
前端缓存分为两种:- 强缓存:浏览器在加载静态资源时,检查 Http Response Header 的 Expires 和 Cache-Control 两个字段。如果在有效期,那么使用浏览器缓存。
- 协商缓存:如果没有命中强缓存,浏览器会向服务器验证是否命中协商缓存。协商缓存实际上是在静态资源的 Header 上标记 Last-Modified、ETag,通过对比浏览器端、服务器端静态资源的这些值,判断是否是同一个文件。如果一致,则返回 304,Not Modified 表示命中协议缓存。否则,浏览器从服务器加载静态文件。
- 静态资源链接添加变化的参数,如:app.js 更新为 app.js?v=20171017
- http://www.cnblogs.com/smallc/p/4019642.html
- http://blog.thehumangeo.com/2013/05/01/dynamically-cache-static-files-using-django-and-nginx/
- https://devblog.kogan.com/blog/a-hidden-gem-in-django-1-7-manifeststaticfilesstorage