先簡單介紹一下現有的前端緩存技術方案,主要分爲http緩存和瀏覽器緩存。javascript
http緩存都是第二次請求時開始的,這也是個老生常談的話題了。無非也是那幾個http頭的問題:css
HTTP1.0的內容,服務器使用Expires頭來告訴Web客戶端它可使用當前副本,直到指定的時間爲止。前端
HTTP1.1引入了Cathe-Control,它使用max-age指定資源被緩存多久,主要是解決了Expires一個重大的缺陷,就是它設置的是一個固定的時間點,客戶端時間和服務端時間可能有偏差。java
Last-Modified是服務器告訴瀏覽器該資源的最後修改時間,If-Modified-Since是請求頭帶上的,上次服務器給本身的該資源的最後修改時間。而後服務器拿去對比。react
若資源的最後修改時間大於If-Modified-Since,說明資源又被改動過,則響應整片資源內容,返回狀態碼200;git
若資源的最後修改時間小於或等於If-Modified-Since,說明資源無新修改,則響應HTTP 304,告知瀏覽器繼續使用當前版本。github
前面提到由文件的修改時間來判斷文件是否改動,仍是會帶來必定的偏差,好比註釋等可有可無的修改等。因此推出了新的方式。web
storage 簡單的緩存方式有cookie,localStorage和sessionStorage。這裏就不詳細介紹他們的區別了,這裏說下經過localStorage來緩存靜態資源的優化方案。面試
localStorage一般有5MB的存儲空間,咱們以微信文章頁爲例。算法
查看請求發現,基本沒有js和css的請求,由於它把所有的不須要改動的資源都放到了localStorage中:
因此微信的文章頁加載很是的快。
一般遵循如下基本步驟來使用 service workers:
下圖展現了 service worker 全部支持的事件:
一個網站是否啓用Service Worker,能夠經過開發者工具中的Application來查看: