假设bundle.js
为750kb,是真的吗,如果将其设置为“永不过期”或“十年内过期”,则浏览器不需要获取该文件,因此可以使您的网站和页面加载更快?
(顺便说一下,Cache-control: max-age
是HTTP / 1.1和if it and Expires:
are both present, Cache-control
overrides the Expires
header。]
如果您有每周或2个月的发布周期,应该将Expires标头设置为1周或2个月吗?我以为每周发布一次,您的某些JavaScript或CSS文件可能会保持不变,因此将其设置为在6个月甚至10年后过期可能会很好? (因为一周后它没有变化?)
但是如果您的文件已更改但浏览器无法获取该文件怎么办?是真的,如果您使用ETag机制,或者使用Expires:
或Cache-control
,那么您可以通过不同的ETag或文件名来“强制”它过期?设置Expires标头长度的好方法是什么?
您可以同时使用所有这些技术。如果您可以在文件名和对它们的引用中包含一个哈希(Expires
),则可以确保只要更改某些内容,就可以破坏缓存。
然后您可以将bundle.53ae823.js
设置为31536000(最大年份),因为您可以信任URI不变的文件(由于哈希,如果文件更改了,URI也将不变)。
当然,您可以实现ETAG以便重新验证缓存。仍然需要将请求发送到您的服务器/ CDN,但是如果文件没有更改,则可以节省用户下载整个文件的时间。
关于此主题的一篇不错的文章,bundle.2020-03-12-08.js
。