最近在学习浏览器的缓存机制,看到有一种方案,使用强缓存,资源名用文件名+md5来命名,实现资源的更新,对于这个方案有几点疑问:
是否每次修改了资源,都要在html中修改link标签,把url指向最新的资源。这样不会很麻烦吗?尤其是同一个资源被无数html引用的时候(所以会有类似的工具/脚本?)
浏览器也会缓存这个html文件,那么html文件自身如何更新呢?比如我用node写个服务器,可能一句app.use('/', index);
就好了,但是每次浏览器也会对html进行缓存,如果用到上述这种方案的话,是否应该在服务器这里做出改动,让所有返回的html文件,都不使用强缓存,这样每次就可以加载到最新修改的html了。(我也查看了几家大网站的F12,有的html就是200,比如百度和网易,新浪这种还是返回的304)
可以讲一讲详细的方案吗。。查看很多资料都是一句“资源名+md5命名,每次加载最新的资源”,初学者在实现上有些看不懂。。。
-> 1, 每次資源更新, HTML 是需要更新的, 這透過程式碼來完成, 例如 HTML 頁面是個模板引擎, md5 檔案後綴透過 Webpack 產生, 渲染一下就好.
-> 2, 看具體策略吧. 如果是靜態檔案, 一般透過HTTP 協定檢查檔案的更新時間或etag, 不更新回傳304, 更新回傳200. HTML 檔案放在伺服器, 跟靜態資源放在CDN產生200(from cache) 區分開. 如果頁面是需要針對每個請求渲染產生, 那一般就是200 了.
-> 3, 整個過程麻煩地很, 根據業務和工具鏈還會有變化, 太複雜, 一般人沒心情講. 推薦去把國外的博客看, 比如https://medium.com/@okonetchn ...