總結下:
1:頁面的首次載入,獲取manifest在內的所有檔案,根據manifest檔案的內容,該快取的快取;
2,第二次載入,先從快取中取出manifest檔案,裡面列出的快取檔案,直接從快取讀取,然後去請求網路的manifest和其他檔案,若新的mannifest檔案版本和舊的一樣,則沒有變動。若有變動則取出需要快取的檔案放入本地,根新本地檔案。
3,但是,已經被渲染的頁面不會重新重新整理,即即使服務端根新manifest檔案後,客戶端的第一次重新整理還是上一次的檔案,第二次重新整理才是更新後的檔案,這是離線快取的機制導致的問題,會有體驗上的不足。
4,解決方案:用**進行手動快取的重新整理解決,呼叫cache.update()進行快取重新整理,cache.swapcache()進行重新請求更新的資源進行渲染。
一、基本概念
離線快取是html5新引入的技術,能夠讓你的web應用程式指定哪些檔案可以快取在本地,使得你的網路斷開時依然可以通過本地的快取來進行訪問瀏覽。
二、使用方法
mime type 宣告
manifest檔案語法
cache manifest
# 上面這行是必須的
# 這是一行注釋
# 在這個檔案中的任何地方都可以新增
# 它們全部都會被忽略
# 在注釋之前可以有空格
# 但必須是在單行前
# 空行也會被忽略
# 這些列在最開始的檔案都是需要被快取的
# 或者是那些列在"cache:"裡的, "cache"頭必須寫在這些檔案之前,如同
# 下面寫好的那樣
images/sound-icon.png
images/background.png
# 注意,每個檔案必須單獨一行
# 對該檔案的引用,將繞過快取,總是會
# 從網路中獲取目標(或在使用者離線時,嘗試從網路上獲取)
network:
comm.cgi
# 這是另一塊要快取的檔案,這次只有乙個css檔案
cache:
style/default.css
我們也可以書寫成這樣:
cache manifest
#version 1.0
cache:
style/default.css
images/sound-icon.png
images/background.png
network:
*
cache manifest:這個是必須的,並且一定要寫在manifest檔案開頭
cache:快取清單列表,此處列出的為需要進行離線快取的資源檔案
network: 白名單列表,需要與服務端進行互動獲取的資源檔案,此處必須列出除快取清單列表以外所有的資源位址(可以使用萬用字元*星號代替),否則沒有列出的資源檔案將載入失敗
引入manifest的頁面,即使沒有被列入快取清單中,仍然會被使用者**快取。並且無法通過白名單列表去除。
(快取清單的檔案列表可以使用絕對路徑或絕對url位址)
開啟離線快取後,我們可以在chrome中開啟f12來看看資源載入有啥區別
可以看出,使用離線快取後的資源,資源請求的狀態碼都變為200,並且在size欄中都被標明為(form cache),載入速度也是顯而易見的。
快取如何更新?
資源被離線快取後,無論我們在後端如何更改資源檔案,客戶端都不會拉取到修改過的檔案。
原來,只有當manifest檔案被更新後(修改檔案任何地方,包括注釋等),客戶端才會更新離線快取檔案,並且每次都會更新全部的快取檔案,包括沒有被修改的資源檔案,但一般這些檔案都會走304的快取策略。
另外,在服務端修改manifest檔案後,客戶端第一次訪問頁面需要再重新整理一次才能獲取最新的資源。因為對於瀏覽器來說,manifest的載入是要晚於其他資源的. 這就導致check manifest的過程是滯後的。發現manifest改變,所有瀏覽器的實現都是緊隨這做靜默更新資源,以保證下次pv,應用到更新。(這一點很蛋疼,但還是有解決辦法,請繼續往下看)。
離線快取物件和事件處理
其中status屬性代表的是當前離線應用的狀態,它可能的值為:
通常, webview的快取有如下三種現象:
通常只使用乙個manifest檔案, 並保證快取的檔案盡可能的少, 以減小manifest每次更新清單中檔案所耗費的時間和流量.
如果一定要使用兩個及以上manifest檔案, 快取檔案請盡量不要相同.
如果以上兩條都不能保證, 那麼, 請保證盡可能在manifest快取的狀態更新時, 主動去重新整理網頁.(此時並不能保證不同網頁之間同乙個快取檔案版本一致)
如果快取的檔案需要加引數執行, 建議將引數內容加到hash中, 如:cached-page.html#parametername=value
manifest 的引入可以使用絕對路徑或者相對路徑, 如果你使用的是絕對路徑, 那麼你的manifest檔案必須和你的站點處於同乙個網域名稱下.
manifest檔案你可以儲存為任意的副檔名, 但是響應頭中以下欄位須取以下定值, 以保證manifest檔案正確被解析, 並且它沒有http快取.
content-type: text/cache-manifest
cache-control: max-age=0
expires: [current time]
離線快取manifest
1 在html檔案中的html標籤中加入如下屬性 2 demo.manifest檔案包含內容如下 cache manifest v1.0.0 需要快取的檔案 cache a.js b.css 不需要快取的檔案 network 無法訪問頁面 fallback 404.html 3 manifest檔案...
H5離線快取機制 Manifest
manifest是乙個簡單的文字檔案,它的副檔名是任意的,定義需要快取的檔案 資源,當第一次開啟時瀏覽器會自動快取相應的資源。manifest的特點 manifest的使用 html新增了乙個manifest屬性,用於指定當前頁面的manifest檔案,引入得路徑可以是相對路徑也可以是絕對路徑,如果...
h5 離線快取機制 manifest
其實manifest是乙個簡單的 文字檔案,它的副檔名是任意的,定義需要快取的檔案 資源,當第一次開啟時,瀏覽器會自動快取相應的資源。html新增了乙個manifest屬性,可以用來指定當前頁面的manifest檔案。建立乙個和html同名的manifest檔案,比如頁面為index.html,那麼...