轉(zhuǎn)帖|其它|編輯:郝浩|2011-04-29 13:32:13.000|閱讀 853 次
概述:傳統(tǒng)的Web應(yīng)用程序有一個很大的癥結(jié)是當(dāng)用戶的網(wǎng)絡(luò)連接不好時,應(yīng)用會加載失敗,為了 解決這一問題,HTML5中引入了Web的離線工作的功能。離線功能使得Web應(yīng)用程序類似于本機(jī)應(yīng)用程序,當(dāng)斷開網(wǎng)絡(luò)連接時可以繼續(xù)瀏覽未瀏覽完成的內(nèi) 容,離線功能的另一個好處是可以永久緩存靜態(tài)的內(nèi)容,而沒有緩存過期的限制,這樣很大程度上加速了網(wǎng)頁的加載速度。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
傳統(tǒng)的Web應(yīng)用程序有一個很大的癥結(jié)是當(dāng)用戶的網(wǎng)絡(luò)連接不好時,應(yīng)用會加載失敗,為了 解決這一問題,HTML5中引入了Web的離線工作的功能。離線功能使得Web應(yīng)用程序類似于本機(jī)應(yīng)用程序,當(dāng)斷開網(wǎng)絡(luò)連接時可以繼續(xù)瀏覽未瀏覽完成的內(nèi) 容,離線功能的另一個好處是可以永久緩存靜態(tài)的內(nèi)容,而沒有緩存過期的限制,這樣很大程度上加速了網(wǎng)頁的加載速度。
離線應(yīng)用的創(chuàng)建
不同于傳統(tǒng)的緩存機(jī)制,HTML5定義了一套獨立的緩存機(jī)制,有一個單獨的文件來記錄要緩存的文件列表,這就意味著用戶可以自己決定哪些文件需要緩 存。離線應(yīng)用看起來是個非常酷的特性,并且在ASP.NET應(yīng)用程序中創(chuàng)建一個離線Web應(yīng)用也是非常簡單的,構(gòu)建離線web應(yīng)用大概可分兩個步驟:
(1) 創(chuàng)建一個離線清單文件
HTML5離線緩存是基于這個緩存清單來確定緩存文件的,如下的圖片顯示這個文件的格式:
可以看到這個文件是以CACHE MANIFEST開頭的,#后面的內(nèi)容是注釋,表明當(dāng)前文件的版本號,值得注意的是當(dāng)這個文件更新的時候,應(yīng)用程序會重新加載緩存的文件,所以當(dāng)緩存的文 件有更新的時候,一個讓程序重新加載緩存文件的標(biāo)準(zhǔn)方法是修改這個清單中的版本號,這樣應(yīng)用程序就知道需要重新加載緩存的文件。上面的清單的版本號是 0.2,如果清單中的某個文件有更新,則只需要把0.2修改為0.3即可。
如上清單中的路徑都是相對路徑,所有的相對路徑都是基于這個清單文件所在的路徑的。我們也可以使用絕對路徑來確定要緩存的文件的。
(2) 在ASP.NET應(yīng)用程序中把清單信息通知給瀏覽器
HTML5規(guī)范規(guī)定這個清單文件必須以text/cache-manifest格式發(fā)送到客戶端,但是現(xiàn)在沒有標(biāo)準(zhǔn)的后綴來識別這一類型文件。在ASP.NET中,可以通過一種變通的方式來達(dá)到這一目的。
1)把清單文件保存為單獨文件,可以加任何后綴名,假設(shè)保存為manifest.mf。
2)新建一個ASP.NET handler,Manifest.ashx
代碼如下:
<%@ WebHandler Language="C#" Class="Manifest" %>
using System;
using System.Web;
public class Manifest : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/cache-manifest";
context.Response.WriteFile(context.Server.MapPath("manifest.mf"));
}
public bool IsReusable {
get
{
return false;
}
}
}
然后在金喜正規(guī)買球頁面中把這個handler標(biāo)識為清單文件:
<html manifest="Manifest.ashx"">
如下是添加了緩存清單的aspx頁面:
以上兩個步驟就完成了離線應(yīng)用程序的構(gòu)建,當(dāng)程序第一次加載時,會加載這個緩存清單,并且根據(jù)清單中文件列表緩存文件,當(dāng)瀏覽器再次加載時就不會去 服務(wù)器中加載緩存過的文件,可以想象,如果我們把一些靜態(tài)的網(wǎng)頁添加為緩存文件,那么用戶只需要第一次下載這些緩存的文件,以后就可以向本地應(yīng)用一樣,無 需再連接網(wǎng)絡(luò)。
需要注意的點
雖然離線應(yīng)用是一個非常酷的應(yīng)用,但是在使用的過程中也會出現(xiàn)一些困擾,當(dāng)我們更改頁面的內(nèi)容時,會發(fā)現(xiàn)修改的內(nèi)容并沒有起作用,原因可能是我們沒 有升級緩存清單的版本,另外即使緩存清單更改完成后,瀏覽器也并不是立即會更新緩存的內(nèi)容,瀏覽器下載和緩存內(nèi)容完全是在后臺自動進(jìn)行的,所以在實際的開 發(fā)過程中,因為有這些困擾,所以最好是在開發(fā)過程中禁用這種離線緩存的功能,等項目發(fā)布的時候再添加。我們無法控制瀏覽器的緩存過程,但是離線應(yīng)用提供了 一些接口,我們可以調(diào)用這些API來讓瀏覽器更新緩存的內(nèi)容,ApplicationCache.update() 是用來更新緩存的內(nèi)容,ApplicationCache.swapCache() 是加載最新版的Web應(yīng)用。
離線應(yīng)用在瀏覽器中的表現(xiàn)
以下是離線應(yīng)用在各個瀏覽器中的表現(xiàn)形式,當(dāng)用瀏覽器打開應(yīng)用了離線功能的頁面,瀏覽器的表現(xiàn)也是不一樣的,F(xiàn)ireFox中會提示是否容許保存內(nèi)容到本地,效果如下:
當(dāng)點擊Allow,瀏覽器就會自動下載要緩存的內(nèi)容,并保存到本地,當(dāng)再次打開頁面時,瀏覽器首先會加載本地存儲的內(nèi)容。
在Chrome和safari瀏覽器下,瀏覽器會自動緩存內(nèi)容而不會有任何的提示,但在Chrome中你可以查看緩存的內(nèi)容:
同時也可以看到當(dāng)前緩存的狀態(tài),如上的圖片顯示當(dāng)前的狀態(tài)是UNCACHED,意思是還沒有把要緩存的內(nèi)容緩存。具體的狀態(tài)值可以參考HTML5離線應(yīng)用規(guī)范。
總結(jié)
以上就是介紹如何在ASP.NET中應(yīng)用HTML5離線功能,在其它的平臺中的設(shè)置也是類似的,不同點在于如何把緩存文件以text/cache- manifest格式發(fā)送到客戶端。HTML5離線應(yīng)用是HTML5規(guī)范中的一個非常重要的特性,用戶可以隨時隨地打開瀏覽Web應(yīng)用,而不需要關(guān)心網(wǎng)絡(luò) 是否已經(jīng)連接,這極大地提高了Web應(yīng)用在用戶中的體驗度,也極大地提高應(yīng)用程序的加載速度
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:葡萄城控件技術(shù)團(tuán)隊博客