html5 Application Cache——加快簡歷二次訪問速度


上篇博客(在github上寫個人簡歷——最簡單卻又不容易的內容羅列)介紹了我在github上放的一個個人在線簡歷,有朋友看了后告訴我一個很大缺陷,使用github挺慢的,每次看的時候都很慢,第一反應這問題我可解決不了,后來想到是否可以利用緩存,至少第二次看的時候會快一些,但緩存機制大部分依賴於瀏覽器,而且默認都用了,還是很慢,所以此路不通。

application cache

忽然靈光一現(原諒我愚笨,其實應該很快想到的),前段日子在看html5的東西,當時覺得application cache沒有太大用處,又膚淺了,用在這個需求實在太合適了。那么是什么是application cache呢?

application cache是html5引入的本地存儲方案之一,和我們平常瀏覽器緩存類似,application cache在本地存儲頁面資源,我們先不用着急看application具體怎么使用,首先看看傳統瀏覽器緩存有哪些問題。

一:瀏覽器緩存是不可靠的,我們不直到當前哪些資源被緩存,也不知道會被緩存多久,因為瀏覽器會隨時因為空間或時間原因舍棄某些緩存,加入新的緩存文件。

二:雖然有瀏覽器緩存,但我們不能依賴瀏覽器緩存完全離線訪問web

application cache解決了這兩個主要問題,application cache允許開發者指定頁面哪些資源需要被緩存,雖然也有空間大小限制,但是可以通過程序更改,可以控制緩存生命周期,安全可靠的讓web離線使用,這么神奇,看看是怎么做到的吧

manifest 文件

要向使用application cache 需要為頁面的html標簽添加manifest屬性,屬性值是manifest文件路徑,可以使用同源的絕對地址,也可以使用相對地址。

<!doctype html>
<html lang="zh" manifest="main.manifest">
</html>

 

application cache是通過mannifest文件來管理的,manifest文件是簡單的文本文件,內容是需要被緩存供離線使用的文件列表,及不需要被緩存或讀取緩存失敗的文件控制。mannifest文件可以使用任意拓展名,但需要在服務器中添加MIME類型匹配,使用apache比較簡單,如果使用.manifest作為拓展名在apache配置文件中添加

AddType text/cache-manifest .appcache

 

使用IIS的話通過界面找到添加MIME窗口添加即可

如何配置

下面是一個manifest文件的示例

main.manifest

 1 CACHE MANIFEST
 2 #version 0.2.0
 3 #date: Nov 24 2013
 4 
 5 CACHE:
 6 css/reset.css
 7 css/main.css
 8 js/jquery.js
 9 images/bg.png
10 images/bg_hl.jpg
11 images/icons/yes.png
12 images/icons/top.png
13 offline.html
14 
15 NETWORK:
16 *
17 
18 FALLBACK:
19 index.html offline.html

 

1. 文件的第一行必須是 CACHE MANIFEST

2. #開頭的行作為注釋語句,所以文件中關於版本和日期都是注釋,為了方便維護

3. 網站的緩存不能超過5M

4. 文件資源路徑可以使用絕對路徑也可以使用相對路徑

5. 文件列表中任意一個緩存失敗都會導致整個緩存失效,瀏覽器hui按沒有application cache處理

6. 既可以站點使用同一個minifest文件,也可以每個頁面使用一個

 

然后看一下CACHE、NETWORK、和FALLBACK三條指令語句

CACHE:指明需要緩存的資源文件,瀏覽器會自動緩存帶有manifest屬性的html頁面,所以yinyongwmanifest文件的頁面不用寫在里面

NETWORK:不需要緩存的文件,名字就叫網絡工作嘛,可以使用通配符

FALLBACK:無法訪問緩存文件的備選文件,也可以使用通配符,上邊例子的配置,讀取不到index.html的話就會跳轉至offline.html

看看效果

在在線簡歷中使用application cache后,訪問一下

 

 可以在控制台看看application cache,果真我們希望緩存的內容都被緩存了,試試離線好不好使,由於不知道github是不是支持及其定義的manifest文件拓展名是什么,只好在自己本地試試了,在電腦上配置好,用手機訪問,然后斷開手機網絡,刷新一下。

刷新了八下依舊好使哎,手機離線也能看,就不截圖了。當清除掉application cache並且關掉網絡的時候,頁面果真到了offline.html

 

更新

這樣不依賴與瀏覽器的緩存機制也有個問題,怎么更新文件告知客戶端呢,總不能永遠使用一份緩存啊。簡單的方法我們可以更新manifest文件,修改注釋的版本號或者日期就可以,這樣瀏覽器就會重新緩存文件,值得注意的是需要minifest文件本身更改(注釋都可以),而緩存文件清單中的文件本身比如offline.html更新瀏覽器是不會重新緩存的。

這樣我們修改了服務器的manifest文件后用戶多刷幾遍頁面就可以了,但未免低級了一些,我們可以通過application cache 提供的接口來檢查更新

application cache 在window上注冊了一個applicationCache對象

status屬性標明當前application cache狀態

0:UNCACHED(未緩存)

1:IDEL(空閑的)

2:CHECKING(正在檢查)

3:DOWNLOADING(正在下載)

4:UPDATEREADY(准備更新)

5:OBSOLETE (已過時)

另外對象有幾個事件,看名字就能知道時做什么的。

對象有三個重要方法

update:嘗試檢查下載新application cache,當然得服務器更新了manifest文件才會下載

swapCache:當status變為UPDATEREADY時就可以更新本地application cache了

abort:取消正在進行的application cache更新

即使下載完新的緩存,也不意味這頁面會更新,我們需要重新加載一次頁面,可以通過這樣的方式來使頁面第一時間更新緩存

applicationCache.onupdateready=function(e) {
      applicationCache.swapCache();
      if (confirm('頁面已更新,是否加載新內容?')) {
        window.location.reload();
      }
    };

 

當然也可以設個輪詢函數定時調用update方法檢查更新,這里不演示了

最后

雖然沒有如願在github上使用application cache,但我已經把代碼push到了我的github上,有興趣同學可以down下來看看,了解到了application cache的使用也算是收獲頗豐,小伙兒伴兒在你的個人主頁上試試application cache吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM