HTML5 應用程式快取

什麼是應用程式快取技術 Application Cache

#HTML5引入了應用程式快取技術,意味著web應用程式可進行緩存,並在沒有網路的情況下使用,透過建立cache manifest文件,可以輕鬆的建立離線應用程式。

Application Cache帶來的三個優點是:

① 離線瀏覽

② 提升頁面載入速度

③ 降低伺服器壓力

而且主要瀏覽器皆以支援Application Cache,就算不支援也不會對程式造成什麼影響

#什麼是Cache Manifest

首先manifest是一個後綴名為minifest的文件,在文件中定義那些需要快取的文件,支援manifest的瀏覽器,會將按照manifest文件的規則,像文件保存在本地,從而在沒有網絡鏈接的情況下,也能訪問頁面。

當我們第一次正確配置app cache後,當我們再次訪問應用時,瀏覽器會先檢查manifest檔是否有變動,如果有變動就會把對應的變成跟新下來,同時改變瀏覽器裡面的app cache,如果沒有變動,就會直接把app cache的資源回傳,基本流程是這樣的。

1017.png

Manifest的特色

離線瀏覽: 使用者可以在離線狀態下瀏覽網站內容。

更快的速度: 因為資料被儲存在本地,所以速度會更快.

減輕伺服器的負載: 瀏覽器只會下載在伺服器上發生改變的資源。

如何使用

html新增了一個manifest屬性,可以用來指定目前頁面的manifest檔。

建立一個和html同名的manifest文件,例如頁面為index.html,那麼可以建立一個index.manifest的文件,然後給index.html的html標籤添加如下屬性即可:

<html manifest="index.manifest">

#Manifest檔##

接下來詳細說說manifest的細節,一個典型的manifest檔案程式碼結構像下面這樣:

CACHE MANIFEST#version 1.3CACHE:    test.cssNETWORK:*

manifest文件,基本格式為三段: CACHE, NETWORK,與FALLBACK,其中NETWORK和FALLBACK為可選項​​。

而第一行CACHE MANIFEST為固定格式,必須寫在前面。

以#號開頭的是註釋,通常會在第二行寫個版本號,用來在快取的檔案更新時,更改manifest的作用,可以是版本號,時間戳或md5碼等等。

CACHE:(必須)

標識出哪些檔案需要緩存,可以是相對路徑也可以是絕對路徑。

a.csshttp://yanhaijing.com/a.css

#NETWORK:(可選)

這一部分是要繞過快取直接讀取的文件,可以使用萬用字元*。

下面的程式碼「login.asp」 永遠不會被緩存,離線時是不可用的:

NETWORK:login.asp

可以使用星號來指示所有其他資源/檔案都需要因特網連接:

NETWORK:*
FALLBACK:(可選)

指定了一個後備頁面,當資源無法造訪時,瀏覽器會使用該頁面。該段落的每筆記錄都列出兩個 URI—第一個表示資源,第二個表示後備頁面。兩個 URI 都必須使用相對路徑並且與清單檔案同源。可以使用通配符。

在下面的範例中,如果無法建立因特網連接,請用 “404.html” 取代 /html5/ 目錄中的所有檔案。


FALLBACK:/html5/ /404.html

在下面的範例中,則以 “404.html” 取代所有檔案。


FALLBACK:*.html /404.html

#如何更新快取

##如下三種方式,可以更新快取:

更新manifest檔案

透過ja​​vascript操作

#清除瀏覽器快取

給manifest新增或刪除文件,都可更新緩存,如果我們更改了js,而沒有新增或刪除,前面例子中註解中的版本號,可以很好的用來更新manifest檔。

html5中引入了js操作離線快取的方法,下面的js可以手動更新本地快取。

window.applicationCache.update();

如果使用者清除了瀏覽器快取(手動或用其他一些工具)都會重新下載檔案。

注意事項

瀏覽器對快取資料的容量限制可能不太一樣(某些瀏覽器設定的限制是每個站點5MB)。

如果manifest文件,或是內部列舉的某一個文件無法正常下載,整個更新過程都會失敗,瀏覽器繼續全部使用舊的快取。

引用manifest的html必須與manifest檔同源,在同一個網域下。

FALLBACK中的資源必須和manifest檔同源。

當一個資源被快取後,該瀏覽器直接請求這個絕對路徑也會存取快取中的資源。

網站中的其他頁面即使沒有設定manifest屬性,請求的資源如果在快取中也從快取中存取。

當manifest檔案改變時,資源請求本身也會觸發更新。

實例- 完整的Manifest 檔案

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.php

FALLBACK:
/html/ /offline.html

##提示:以"#" 開頭的是註解行,但也可滿足其他用途。應用程式的快取會在其 manifest 檔案更改時被更新。如果您編輯了一幅圖片,或修改了一個 JavaScript 函數,這些變更都不會重新快取。更新註解行中的日期和版本號碼是一種使瀏覽器重新快取檔案的方法。


繼續學習
||
<!DOCTYPE HTML> <html> <head> <title>Clock</title> <script src="clock.js"></script> <link rel="stylesheet" href="clock.css"> </head> <body> <p>The time is: <output id="clock"></output></p> <p>需要从外部引入JS文件才能显示。</p> </body> </html>