html5 manifest 離線緩存

**干什么用的?
**
離線緩存為的是第一次請求后,根據(jù)manifest文件進行本地緩存,并且在下一次請求后進行展示(若有緩存的話,無需再次進行請求而是直接調(diào)用緩存),最根本的感覺是它使得WEB從online可以延伸到了offline領(lǐng)域。

應(yīng)用場景
h5游戲及一些頁面內(nèi)容不經(jīng)常會變動,相對較為固定的內(nèi)容。

怎么用的?
若想使用manifest功能,需要在需要進行緩存功能的html文件之中寫入 聲明

<meta manifest = ‘demo.appcache’> // 這個文件格式是官方推薦的

這里,若遇到如此報錯

 Application Cache Error event: Manifest fetch failed (404)

其原因是因為 manifest文件需要正確的配置MIME-type(描述該消息的媒體類型),即
“text/cache-manifest”,必須在服務(wù)器端進行配置。

manifest文件如何進行配置?

首先manifest分為三個部分

1、CACHE MANIFEST //指出需要進行manifest的文件,此文件將會在首次下載后被緩存下來

CACHE MANIFESTCACHE:/index.css/index.html/index.js

2、NETWORK //指出需要向服務(wù)器請求即不需要manifest的文件,此文件不會被緩存,若為*則表示所有文件均需要進行網(wǎng)絡(luò)請求,而不使用緩存。

NETWORK:*

3、FALLBACK //指出當頁面無法進行訪問時,顯示的頁面(替換的頁面),例子中,當html5文件夾中的文件出現(xiàn)異常情況,,使用404.html頁面替換掉異常頁面 (第一個uri路徑是資源地址,第二個是備胎地址)

FALLBACK:/html5/ /404.html

完整的實例

CACHE MANIFEST# 2017-04-06 v1.0.0
CACHE:/theme.css/logo.gif/main.js
NETWORK:login.asp
FALLBACK:/html5/ /404.html

注意:這里的版本號,是我們?nèi)藶橐?guī)定的,而非是manifest自帶的屬性,當每一次html加載到manifest時,會對manifest配置文件進行臟檢查,當檢測到manifest文件被修改后,之前的緩存將會被棄用,轉(zhuǎn)而去根據(jù)manifest文件中配置的新內(nèi)容進行緩存。

查看:

670E294B-9EB2-48F9-9C1B-4885FD7AD37E.png

被緩存的文件可以使用谷歌瀏覽器進行查看: f12 -> Application -> Application Cache

ftchinese 手機版使用了離線緩存技術(shù),可以去看下其源碼以及緩存的文件是如何進行存儲的

問題!

manifest除了緩存manifest.appcache文件所指定的資源外,還必定會緩存當前的html頁面,即

<meta manifest=‘demo.appcache'>

標簽所在的頁面以及demo.appcache文件里面所規(guī)定的靜態(tài)資源一并存入 application Cache 之中。
當用戶再一次訪問該頁面時,demo.appcache文件之中CACHE MANIFEST所指向的資源就不需要重新進行加載了,但是問題是,當前的html頁面也會跟著cache直接讀出來了,可能會造成即使 我們的頁面更新了,但是用戶還是看的老舊版本頁面(因為更新mainfest的時候,頁面加載已經(jīng)開始了,但是緩存更新卻尚未完成,瀏覽器還是會使用緩存的資源,當瀏覽器檢測到了Application Cache有更新時,本次不會使用新的資源,下一次才會進行使用)

解決方案:

applicationCache.addEventListener("updateready",function(){
applicationCache.swapCache();      // 手工更新本地緩存
location.reload();    //重新加載頁面頁面
},true);````

添加事件監(jiān)聽,當監(jiān)聽到本地緩存更新后,進行重載頁面,以達到更新的目的。

****

**寫在最后:**

**這是本人第一篇簡書,文筆難免稚嫩,希望各位前輩能夠不吝批評與建議,祝各位工作順利。**




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容