摘要:下面的一片文章緩存關(guān)于服務(wù)器如何控制瀏覽器緩存哪里資源緩存的有效時(shí)間以及如何替換未過(guò)期的緩存等過(guò)程。推薦配置為了減少提交文件數(shù),采用的文件命名規(guī)則
下面的一片文章《HTTP緩存》關(guān)于服務(wù)器如何控制瀏覽器緩存哪里資源、緩存的有效時(shí)間、以及如何替換未過(guò)期的緩存等過(guò)程。
https://developers.google.com...
不過(guò)該篇文章中有一些點(diǎn)沒(méi)有詳細(xì)說(shuō),然后其他資料:
1.瀏覽器是如何判斷緩存過(guò)期了的
HTTP1.0里定義了eg:Expires,指定該響應(yīng)的絕對(duì)過(guò)期時(shí)間,eg: Expires: Fri,05 Jul 2015, 05:00:00 GMT;但是如果服務(wù)器時(shí)間跟客戶端時(shí)間不一樣就尷尬了,于是這種方式后來(lái)慢慢被棄用了。
HTTP1.1里定義了Cache-Control,里面有一系列控制緩存的字段,上篇文章也有提,其中max-age用來(lái)指定該響應(yīng)有效的時(shí)間,瀏覽器比較收到該響應(yīng)的時(shí)間與max-age來(lái)判斷響應(yīng)是否過(guò)期
eg:
Cache-Control:max-age=31536000.
2.服務(wù)器如何加ETag 驗(yàn)證令牌以及Last-Modified等
以koa實(shí)現(xiàn)為例:
//koastart var koa = require("koa"); var app = new koa(); // response app.use(function *(){ this.body = "Hello World"; var etag = this.get("ETag"); console.log("etag:"+etag); var date = new Date; var hashStr = this.body; var hash = require("crypto").createHash("sha1").update(hashStr).digest("base64"); this.set({ "Cache-Control":"max-age=120", "Etag": hash, "Last-Modified": new Date }); });
app.listen(3000);
第一次訪問(wèn)之后返回的http頭文件中已經(jīng)寫入的相關(guān)的信息
第二次發(fā)起請(qǐng)求的時(shí)候If-None-Match帶回Etag給瀏覽器進(jìn)行比對(duì),判斷是否需要更新緩存。
3.服務(wù)器如何給資源文件路徑加指紋的
常用指紋生成辦法:使用數(shù)據(jù)摘要要算法 對(duì)文件求摘要信息,摘要信息與文件內(nèi)容一一對(duì)應(yīng),將摘要信息作為文件名(的一部分)或者版本號(hào)
文件的hash指紋通常作為前端靜態(tài)資源實(shí)現(xiàn)持久化緩存的方案之一,Webpack提供了兩個(gè)配置項(xiàng)可供使用:hash和chunkhash.
chunkhash代表的是chunk的hash值,根據(jù)具體chunk模塊文件的內(nèi)容計(jì)算所得的hash值,所以某個(gè)文件的改動(dòng)只會(huì)影響它本身的hash指紋,不會(huì)影響其他文件。
推薦webpack配置:
output: { path: "./dist/", //為了減少提交文件數(shù),采用 ?_v=[chunkhash:8]的文件命名規(guī)則 filename: utils.assetsPath("js/[name].js?_v=[chunkhash:8]"), chunkFilename: utils.assetsPath("js/[id].chunk.js?_v=[chunkhash:8]"), // filename: utils.assetsPath("js/[name].[chunkhash:8].js"), // chunkFilename: utils.assetsPath("js/[id].[chunkhash:8].js") }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/61883.html
摘要:其關(guān)鍵路徑如下圖所示圖緩存關(guān)鍵路徑三關(guān)鍵路徑之驗(yàn)證緩存瀏覽器發(fā)起一個(gè)請(qǐng)求,生成報(bào)文,先發(fā)送到緩存器,緩存器驗(yàn)證是否有本地緩存,緩存是否過(guò)期等,即圖的第一條路徑,稱之為驗(yàn)證緩存。 一、證件照?qǐng)鼍?拍一次證件照麻煩且費(fèi)錢,因此每次拍的時(shí)候我們都會(huì)多留幾張備用。這就是計(jì)算機(jī)世界的緩存,在現(xiàn)實(shí)世界中的寫照。 如果某個(gè)行為很消耗資源,很麻煩,那在實(shí)現(xiàn)它的時(shí)候就順便多保留幾份,這種行為就是緩存。特...
摘要:和的關(guān)系不是一項(xiàng)技術(shù),也不是一個(gè)框架,我們可以把她理解為一種模式,一種通過(guò)應(yīng)用一些技術(shù)將在安全性能和體驗(yàn)等方面帶來(lái)漸進(jìn)式的提升的一種的模式。這里需要注意的是,首次注冊(cè)線程的頁(yè)面需要再次加載才會(huì)受其控制。 1. PWA和Service Worker的關(guān)系 PWA (Progressive Web Apps) 不是一項(xiàng)技術(shù),也不是一個(gè)框架,我們可以把她理解為一種模式,一種通過(guò)應(yīng)用一些技...
摘要:和的關(guān)系不是一項(xiàng)技術(shù),也不是一個(gè)框架,我們可以把她理解為一種模式,一種通過(guò)應(yīng)用一些技術(shù)將在安全性能和體驗(yàn)等方面帶來(lái)漸進(jìn)式的提升的一種的模式。這里需要注意的是,首次注冊(cè)線程的頁(yè)面需要再次加載才會(huì)受其控制。 1. PWA和Service Worker的關(guān)系 PWA (Progressive Web Apps) 不是一項(xiàng)技術(shù),也不是一個(gè)框架,我們可以把她理解為一種模式,一種通過(guò)應(yīng)用一些技...
摘要:與瀏覽器緩存一瀏覽器對(duì)緩存的處理選項(xiàng)控制請(qǐng)求服務(wù)器策略是忽略資源的緩存策略的情況下額外強(qiáng)制請(qǐng)求服務(wù)器的意思。而節(jié)點(diǎn)只針對(duì)中的配置會(huì)覆蓋的配置。Nginx與瀏覽器緩存 一、瀏覽器對(duì)緩存的處理:Internet選項(xiàng) ★ 控制請(qǐng)求服務(wù)器策略:是忽略資源的緩存策略的情況下額外強(qiáng)制請(qǐng)求服務(wù)器的意思。 ?★?檢查存儲(chǔ)的頁(yè)面較新版本 ? ? ? ? 1.每次訪問(wèn)網(wǎng)頁(yè)時(shí)? ? ? ? ? ? ?...
摘要:對(duì)于瀏覽器緩存,相信很多開(kāi)發(fā)者對(duì)它真的是又愛(ài)又恨。那么瀏覽器緩存究竟是個(gè)什么樣的神奇玩意呢什么是瀏覽器緩存簡(jiǎn)單來(lái)說(shuō),瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過(guò)的資源如頁(yè)面,圖片,,數(shù)據(jù)等拷貝一份副本儲(chǔ)存在瀏覽器中。 對(duì)于瀏覽器緩存,相信很多開(kāi)發(fā)者對(duì)它真的是又愛(ài)又恨。一方面極大地提升了用戶體驗(yàn),而另一方面有時(shí)會(huì)因?yàn)樽x取了緩存而展示了錯(cuò)誤的東西,而在開(kāi)發(fā)過(guò)程中千方百計(jì)地想把緩存禁掉。那么瀏覽器緩存究竟...
閱讀 901·2021-10-13 09:39
閱讀 3781·2021-10-12 10:12
閱讀 1861·2021-08-13 15:07
閱讀 1068·2019-08-29 15:31
閱讀 2939·2019-08-26 13:25
閱讀 1840·2019-08-23 18:38
閱讀 1952·2019-08-23 18:25
閱讀 1904·2019-08-23 17:20