原理
基於一個新建的.appcache檔案的快取機制(非儲存技術),通過這個檔案上的解析清單離線儲存資源,這些資源會像cookie一樣被儲存下來.在之後當網路處於離線狀態時,瀏覽器會利用這些被離線儲存下來的資料來展示頁面.
使用離線儲存
html新增了一個manifest屬性,可用於指定當前頁面的appache檔案, 建立一個和html同名的appache檔案,比如index.html,就可以建立一個index.appache檔案.
<!DOCTYPE HTML>
<html manifest = "cache.manifest">
//網頁內容...
</html>
複製程式碼
離線儲存的manifest組成部分
manifest(.appcache)檔案是簡單的文字檔案,它告知瀏覽器被快取的內容和不快取的內容.
首先展示一下cache.manifest檔案的書寫方式,如:
CACHE MANIFEST
# 2018-05-12 v1.0.0
/style.css
/logo.gif
/index.js
NETWORK:
login.asp
FALLBACK:
/html5/ /404.html
複製程式碼
離線儲存的mainfest一般由三個部分組成:
-
CACHE MANIFEST:
必選,裡面包括需要被離線儲存的資源列表,在此標題下列出的檔案將在首次下載後進行快取.CACHE MANIFEST # 2018-05-12 v1.0.0 /style.css /logo.gif /index.js 複製程式碼
表示當manifest檔案載入後,瀏覽器會下載網站當前目錄的style.css , logo.gif , index.js三個檔案,然後,無論使用者什麼時候和網路斷開,這三個檔案都還是可用的.
-
NETWORK:
可選,裡面包括不會被快取的內容,在次標題下列出的檔案只有在線上的情況下才能被訪問,如果在CACHE和NETWORK中有一個相同的資源,那麼這個資源還是會被離線儲存,也就是說CACHE的優先順序更高.NETWORK: login.asp 複製程式碼
表示login.asp不會被快取起來,且離線時不可以使用.
可以使用星號來指示所有其他資源/檔案都需要因特網連線:NETWORK: * 複製程式碼
-
FALLBACK:
可選,表示如果第一個資源訪問失敗,就使用第二個資源替換. 比如:
/html/ /404.html
表示用"404.html"替代當/html/目錄中的所有檔案方訪問失敗時的頁面.
//404.html
表示用"404.html"替代當前目錄中的所有檔案.
*.html/404.html
表示用"404.html"檔案代替所有html檔案.FALLBACK: /html5/ /404.html 複製程式碼
表示當無法建立因特網連線時,用"404.html"替代當/html5/目錄中的所有檔案.
注意:以 "#" 開頭的是註釋行,但也可滿足其他用途.應用的快取會在其 manifest 檔案更改時被更新.如果您編輯了一幅圖片,或者修改了一個 JavaScript 函式,這些改變都不會被重新快取.更新註釋行中的日期和版本號是一種使瀏覽器重新快取檔案的辦法。
瀏覽器如何對離線儲存的資源進行管理和載入
-
線上情況下
瀏覽器發現html頭部有manifest屬性,它會請求manifest對應檔案.
如果是第一次訪問,那麼瀏覽器就會根據manifest檔案的內容下載相應的資源並且進行離線儲存。
如果已經訪問過app並且資源已經離線儲存了,那麼瀏覽器就會使用離線的資源載入頁面,然後瀏覽器會對比新的manifest檔案與舊的manifest檔案,如果檔案沒有發生改變,就不做任何操作,如果檔案改變了,那麼就會重新下載檔案中的資源並進行離線儲存.(????) -
離線情況下
瀏覽器就直接使用離線儲存的資源.
更新快取的方式
一旦檔案被快取,則瀏覽器會繼續展示已快取的版本,即使修改了伺服器上的檔案.為了確保瀏覽器更新快取,需要更新manifest 檔案.更新方式有:
- 更新manifest檔案
給manifest檔案新增或刪除檔案,或者沒有新增或刪除檔案,只修改了檔案,可以通過更改版本號等來更新manifest檔案.(論#註釋的重要性!) - 通過js操作手動更新
window.applicationCache.update()
- 清除瀏覽器快取
如果使用者清除了瀏覽器快取(手動或用其他一些工具),都會重新下載檔案。
參考網站:
https://segmentfault.com/a/1190000006984353
https://blog.csdn.net/zhouziyu2011/article/details/58588546
https://www.cnblogs.com/shoestrong/p/6435169.html