manifest離線快取機制

2022-08-28 20:33:11 字數 2638 閱讀 7481

總結下:

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,那麼...