天天看點

html5應用緩存與Web Workers

離線浏覽,使用者可以在離線的時候浏覽已經加載并且緩存好的資料

加快加載速度。

減少伺服器負載。

如果啟用應用程式緩存,需要在<code>&lt;html&gt;</code>标簽當中包含manifest屬性,manifest檔案的建議擴充名是:”.appcache”

manifest檔案為我們提供了三種緩存的方式: 

version n.n :version表示目前manifest的版本,當version發生變化的時候,此時當使用者再次加載的時候,會将CACHE标簽下列出的所有檔案重新下載下傳一次。 

- CACHE MANIFEST:在此标題下列出的檔案,将在首次下載下傳後進行緩存。 

- NETWORK: 在此标題下列出的檔案需要與伺服器的連結,且不會被緩存。 

- FALLBACK: 在此标題下列出的檔案,規定通路緩存失敗後,備用通路的資源,第一個是通路源,第二個是替換檔案*.html /offline.html,例如404頁面。

這裡我建立一個web工程,并且建立一個html檔案: 

index.html

style.css

可以看到這裡,我的頁面很簡單,并且引用了一個style.css樣式檔案。并且在<code>&lt;html&gt;</code>标簽當中,指定了緩存檔案index.appcache. 

index.appcache 内容如下:

可以看到,這裡我們使用CACHE類型的緩存,表示需要緩存index.html和css/style.css這兩個檔案。此時打開伺服器,浏覽該網頁,在關閉伺服器,會發現該網頁同樣可以通路,此時按下F12,打開開發者選項,會發現有如下緩存: 

同時也可以使用NETWORK類型的緩存,來表示那些檔案是需要聯網下載下傳的,這裡我将css/style.css檔案寫入到NETWORK類型的緩存當中。

html5應用緩存與Web Workers

可以看到此時隻是緩存了html頁面,并沒有緩存css/style.css檔案,此時關閉伺服器,再次重新整理該頁面,效果如下: 

可以看到此時,就隻是加載了html頁面,并麼有加載css檔案,是以h1标簽的字型是預設的。

這裡,我将version更改了1.1,此時再次通路該頁面的時候, 是會到服務其下載下傳最新的頁面,說到這裡,緩存的缺點就出來了,就是哪怕我一個頁面中隻更新一行文字,但是當我更改了”index.appcache”檔案中的version值之後,就會重新将CACHE中定義的所有内容,重新下載下傳一次。

另外,我們還可以使用applicationcache對象來自動更新緩存。如下:

applicationcache是window對象的直接子對象,該對象的事件清單如下: 

status 傳回緩存的狀态

可選值

比對常量

描述

appCache.UNCACHED

未緩存

1

appCache.IDLE

閑置

2

appCache.CHECKING

檢查中

3

appCache.DOWNLOADING

下載下傳中

4

appCache.UPDATEREADY

已更新

5

appCache.OBSOLETE

失效

方法

方法名

update()

發起應用程式緩存下載下傳程序

abort()

取消正在進行的緩存下載下傳

swapcache()

切換成本地最新的緩存環境

postMessage() :用于向html頁面回傳一段消息。

terminate() :終止web workers,并且釋放計算機資源。

下面使用web workers簡單實作一數字更新的demo: 

建立一個web工程,建立index.html

這裡在index.html檔案當中引入了index.js檔案。 

index.js

可以看到,這裡講更新資料的具體操作,使用Worker來更新,在worker當中加載了count.js檔案來做一些耗時,複雜的計算。然後使用worker的onmessage回調方法,将count.js傳回的結果重新顯示給numDiv。 

count.js

count.js檔案比較簡單,每隔一秒更新countNum的值,然後回傳給調用者,也就是這裡的index.js

此時運作效果如下: 

html5應用緩存與Web Workers

下面添加一個開始停止的控制按鈕:

html5應用緩存與Web Workers

另外我們還可以通過navaigator對象的onLine屬性來判斷目前浏覽器是否線上,該屬性屬于隻讀屬性,會傳回boolean類型的值。

轉載至:http://blog.csdn.net/mockingbirds/article/details/48412967