HTML5離線存儲(chǔ)之Application Cache

關(guān)于html5的離線存儲(chǔ),大致可分為:

  • localStorage, sessionStorage
  • indexedDB
  • web sql
  • application cache

可以在chrome的debug工具/Resources下產(chǎn)看鲤孵,下面來著重說明一下Application Cache。

訪問流程

CFF50BCA9FB64CEC9B2FA8D65A0CBDBC.png

當(dāng)我們第一次正確配置app cache后嵌纲,當(dāng)我們?cè)俅卧L問該應(yīng)用時(shí),瀏覽器會(huì)首先檢查manifest文件是否有變動(dòng),如果有變動(dòng)就會(huì)把相應(yīng)的變得跟新下來酷麦,同時(shí)改變?yōu)g覽器里面的app cache弹惦,如果沒有變動(dòng)否淤,就會(huì)直接把a(bǔ)pp cache的資源返回,基本流程是這樣的棠隐。

特點(diǎn)

  • 離線瀏覽: 用戶可以在離線狀態(tài)下瀏覽網(wǎng)站內(nèi)容
  • 更快的速度: 因?yàn)閿?shù)據(jù)被存儲(chǔ)在本地石抡,所以速度會(huì)更快
  • 減輕服務(wù)器的負(fù)載: 瀏覽器只會(huì)下載在服務(wù)器上發(fā)生改變的資源

如何使用

首先,我們建立一個(gè)html文件助泽,類似這樣:

<html lang="en" mainfest="index.manifest">
 <head></head>
 <body></body>
</html>

可能有些代碼看不懂啰扛,我們先看最簡(jiǎn)單的,第一行配置了一個(gè)manifest=”manifest.appcache”(注意是mani不是main)嗡贺,這是使用app cache首先要配置的隐解,然后我們?cè)谶@個(gè)html文件里引入了兩個(gè)img做為測(cè)試用,然后監(jiān)聽了load時(shí)間來查看看application的status暑刃,關(guān)于applicationCache的api厢漩,可以查看。

然后在相同目錄下新建一個(gè)manifest.appcache文件岩臣,注意關(guān)于路徑要和html頁面配置時(shí)一致即可溜嗜。

CACHE MANIFEST
#version 1.3

CACHE:
img/1.jpg
img/2.jpg
test.css
NETWORK:
*

關(guān)于manifest.appcache文件,基本格式為三段: CACHE架谎,NETWORK炸宵,與 FALLBACK,其中NETWORK和FALLBACK為可選項(xiàng)谷扣,而第一行CACHE MANIFEST為固定格式土全,必須寫在前面。

CACHE:(必須)

標(biāo)識(shí)出哪些文件需要緩存会涎,可以是相對(duì)路徑也可以是絕對(duì)路徑裹匙。
例如:aa.css,http://www.baidu.com/aa.js.

NETWORK:(可選)

這一部分是要繞過緩存直接讀取的文件末秃,可以使用通配符*概页,,也就是說除了上面的cache文件,剩下的文件每次都要重新拉取练慕。例如*惰匙,login.php技掏。

FALLBACK:(可選)

指定了一個(gè)后備頁面,當(dāng)資源無法訪問時(shí)项鬼,瀏覽器會(huì)使用該頁面哑梳。該段落的每條記錄都列出兩個(gè) URI—第一個(gè)表示資源,第二個(gè)表示后備頁面绘盟。兩個(gè) URI 都必須使用相對(duì)路徑并且與清單文件同源鸠真。可以使用通配符奥此。例如*.html /offline.html弧哎。

有了上面兩個(gè)文件之后還要配置服務(wù)器的mime.types類型雁比,找大盤apache的mime.types文件稚虎,添加

text/cache-manifest .appcache

OK,上面文件配置完成之后偎捎,application cache就可以運(yùn)行了蠢终。
查看console:

08E4767CD7CE401780A489744D409E21.png

可以看到,一下子這么多l(xiāng)og茴她,但是除了4是我們console的log之外寻拂,其他的都是appcache自己打的,因?yàn)槲覀兣渲昧薽anifest丈牢,系統(tǒng)會(huì)默認(rèn)打出appcache的log祭钉。關(guān)于status的值:

然后,通過log己沛,我們看到一些文件已經(jīng)被緩存慌核,我們可以查看chrome Resources來查看:

817B55DAEBE54501AB60735BD094BAB9.png

證明直接從緩存拿去文件:

36DDD1168B21474DA8F03B7BE73778A1.png

更新緩存的方式

更新manifest文件

瀏覽器發(fā)現(xiàn)manifest文件本身發(fā)生變化,便會(huì)根據(jù)新的manifest文件去獲取新的資源進(jìn)行緩存申尼。

當(dāng)manifest文件列表并沒有變化的時(shí)候垮卓,我們通常通過修改manifest注釋的方式來改變文件,從而實(shí)現(xiàn)更新师幕。

通過javascript操作

瀏覽器提供了applicationCache供js訪問粟按,通過對(duì)于applicationCache對(duì)象的操作也能達(dá)到更新緩存的目的。

清除瀏覽器緩存

對(duì)于第一種霹粥,我們修改一下manifest文件灭将,把version改為1.4,然后刷新頁面后控。


image

我們可以發(fā)現(xiàn)庙曙,appcache更新了緩存重新從網(wǎng)絡(luò)上拉去的cache的文件,但是忆蚀,我們?nèi)绻胍吹礁淖兎仨氃俅嗡⑿马撁妗?/p>

對(duì)于第二種方法姑裂,我們首先修改一下我們的js,添加一個(gè)監(jiān)聽事件:

window.applicationCache.addEventListener('updateready', function(){
    console.log('updateready!');
    window.applicationCache.swapCache();
});

清除瀏覽器緩存再試一次男旗,這次我們?cè)赾onsole里調(diào)用window.applicationCache.update();舶斧,看看發(fā)生了什么:

image

updateready事件觸發(fā)了,同樣察皇,appcache也更新了緩存茴厉,其中swapCache方法的意思是重新應(yīng)用跟新后的緩存來替換原來的緩存!什荣,到這里后基本的appcache也差不多了矾缓。

注意事項(xiàng):

  • 站點(diǎn)離線存儲(chǔ)的容量限制是5M

  • 如果manifest文件,或者內(nèi)部列舉的某一個(gè)文件不能正常下載稻爬,整個(gè)更新過程將視為失敗穿仪,瀏覽器繼續(xù)全部使用老的緩存

  • 引用manifest的html必須與manifest文件同源,在同一個(gè)域下

  • FALLBACK中的資源必須和manifest文件同源

  • 當(dāng)一個(gè)資源被緩存后蝶糯,該瀏覽器直接請(qǐng)求這個(gè)絕對(duì)路徑也會(huì)訪問緩存中的資源叮趴。

  • 站點(diǎn)中的其他頁面即使沒有設(shè)置manifest屬性,請(qǐng)求的資源如果在緩存中也從緩存中訪問

  • 當(dāng)manifest文件發(fā)生改變時(shí)友瘤,資源請(qǐng)求本身也會(huì)觸發(fā)更新

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翠肘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辫秧,更是在濱河造成了極大的恐慌束倍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盟戏,死亡現(xiàn)場(chǎng)離奇詭異绪妹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抓半,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門喂急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笛求,你說我怎么就攤上這事廊移。” “怎么了探入?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵狡孔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蜂嗽,道長(zhǎng)苗膝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任植旧,我火速辦了婚禮辱揭,結(jié)果婚禮上离唐,老公的妹妹穿的比我還像新娘。我一直安慰自己问窃,他們只是感情好亥鬓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著域庇,像睡著了一般嵌戈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上听皿,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天熟呛,我揣著相機(jī)與錄音,去河邊找鬼尉姨。 笑死庵朝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啊送。 我是一名探鬼主播偿短,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馋没!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起降传,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤篷朵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后婆排,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體声旺,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年段只,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腮猖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赞枕,死狀恐怖澈缺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炕婶,我是刑警寧澤姐赡,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站柠掂,受9級(jí)特大地震影響项滑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涯贞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一枪狂、第九天 我趴在偏房一處隱蔽的房頂上張望危喉。 院中可真熱鬧,春花似錦州疾、人聲如沸姥饰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽列粪。三九已至,卻和暖如春谈飒,著一層夾襖步出監(jiān)牢的瞬間岂座,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工杭措, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留费什,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓手素,卻偏偏與公主長(zhǎng)得像鸳址,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泉懦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:H5緩存機(jī)制淺析-移動(dòng)端Web加載性能優(yōu)化【干貨】 作者:賀輝超稿黍,騰訊游戲平臺(tái)與社區(qū)產(chǎn)品部 高級(jí)工程師 目錄...
    meng_philip123閱讀 11,495評(píng)論 6 48
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)崩哩,斷路器巡球,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 0. 前言 前面有被用戶投訴 APP 流量消耗厲害: 于是乎考慮了流量方面的問題。暫時(shí) APP 中涉及流量的幾個(gè)方...
    zyl06閱讀 23,960評(píng)論 5 62
  • 創(chuàng)建運(yùn)行在手機(jī)上的web app時(shí)邓嘹,鑒于手機(jī)用戶的網(wǎng)絡(luò)情況酣栈,我們需要考慮到用戶離線使用的情況。HTML5支持構(gòu)建離...
    layjoy閱讀 830評(píng)論 0 1
  • 小梅子姐姐:自從孩子降生汹押,好奇心就伴隨孩子左右矿筝,好奇心是人類的天性,是創(chuàng)新和求知欲的動(dòng)力源泉棚贾,好奇心對(duì)孩子的成長(zhǎng)和...
    小梅子姐姐閱讀 746評(píng)論 0 2