Google App Engine:如何禁用“静态”文件的缓存或使缓存更智能
我在本地使用应用引擎,有时候JS文件在刷新页面时会被缓存,这让我很烦,因为我不知道是我写的JavaScript代码有问题,还是缓存出了问题。
我该怎么完全禁用*.js文件的缓存呢?或者说,能不能让它智能一点,比如根据最后修改的日期来判断。
谢谢!
更新- 结果发现,Chrome开发版(至少在Mac上)有缓存问题,换回Chrome Beta就解决了这些问题。不过大家的回答还是很有帮助,谢谢!
2 个回答
很多大网站都有一个常用的做法,就是把文件缓存很久,但在调用.js或.css文件的链接中加上一个独特的标识,这个标识通常是根据版本号或日期来的。例如:
<script type="text/javascript" src="static/util.js?version=20100310"></script>
这样做的好处是可以获得最佳的缓存效果,同时也能确保文件是最新的。唯一需要注意的就是怎么在链接中加上最新的版本号,这个可以根据你部署的环境来自动化处理。
根据文档,你可以为整个应用设置一个缓存过期时间:
通常情况下,网页浏览器会在一段时间内保留从网站加载的文件。你可以通过添加一个叫做 default_expiration 的元素,为应用中的所有静态文件处理器定义一个全局的默认缓存时间。你也可以为特定的静态文件处理器设置缓存时间。(脚本处理器可以通过返回合适的HTTP头信息来设置缓存时间。)
default_expiration
这是一个静态文件在用户浏览器中应该被缓存的时间长度,如果处理器没有指定自己的过期时间。这个值是一个数字和单位的字符串,用空格分隔,单位可以是 d(天)、h(小时)、m(分钟)和 s(秒)。例如,“4d 5h”表示文件在浏览器首次加载后会被缓存4天5小时。
default_expiration 是可选的。如果不设置,浏览器会自行决定缓存的时间。
...如果你想按目录来指定过期时间:
expiration
这是一个静态文件通过这个处理器在用户浏览器中应该被缓存的时间长度。这个值也是一个数字和单位的字符串,用空格分隔,单位同样可以是 d(天)、h(小时)、m(分钟)和 s(秒)。例如,“4d 5h”表示文件在浏览器首次加载后会被缓存4天5小时。
你可以试着把它们设置为 0d0h 或 1s,看看是否能完全禁用缓存。