Dir*_*oer 5 html cache-control browser-cache offline-caching
我们有一个包含+50.000活跃用户的页面.有时,当我们更新后端和前端时,我们会看到一小部分似乎加载旧HTML的人会出现JavaScript错误.(它找不到对象X,因为我们从后端的JSON中删除了它).
我们至少在Android和IOS设备上都见过这个,但也可能在桌面浏览器上.
这可能是代码更改后的几天.
我觉得这有关于书签或真正的旧标签的事情.
我不认为我们的用户正在经历一些非常消极的事情(也许这是一个预加载而他们甚至看不到它),但是它会产生很多噪音,隐藏着我们可能遇到的真正问题.
其中一个页面的示例:https://poules.com/en/pools/aaygun96-wk-poule/world-cup-2018/ranking
这实际上是缓存的常见问题.因此,您可以采取一些措施来避免或缩小问题.
在文件名中添加一个哈希值 - Cache Busting «这对资产来说效果特别好».
如果您在构建链中使用webpack,gulp或grunt之类的东西,这很容易.这意味着你的所有javascript,css或其他文件都应该在名称上嵌入一个随机密钥,比如bundle-21mn3j32j2.js这将确保它们将是一个全新的加载.
也喜欢添加哈希,有时不那么有效,在网址上添加这个文件的版本 - 添加查询字符串.
在这种情况下,你会添加类似myscript.js的东西?v = 26062018«实际上你可以经常看到这个.»这里有一篇很好的文章,为什么不使用它
和这里有关为什么以及如何使用缓存清除
使用服务器上的缓存配置,为您的文件.
在这种情况下配置文件的响应头«这专门用于初始文件,如index.html,你将无法添加哈希».
使用类似的配置ETag时 的Cache-Control和这里更多.
是的,这取决于服务器,所以我将为主要的«apache,nginx和IIS»添加网址.Etags的使用非常有趣,因为它告诉浏览器文件何时发生变化.
现在,我的建议和我正在做的事情.制作一个小的index.html文件并将其从缓存中取出或为此文件使用非常好的Etag配置,使用webpack(其中一个)使用散列缓存清除所有依赖关系,处理图像,音频的缓存策略,等等
请记住,从缓存中获取的所有内容都会增加带宽消耗,缓存上的所有内容都可以节省带宽并提高速度.
最后一个建议,使用cloudflare.com可以轻松完成所有这些微调等等.
阅读:
- 与Webpack,缓存和文件名哈希相关
- 缓存Busting前端资源:文件名是否仍然需要重新启动?
- 缓存控制
关于服务器缓存:
- 阿帕奇,并在这里
- Nginx的,和这里
- 国际空间站
我希望它有所帮助.