亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

有趣的HTML5:離線存儲(chǔ)

Binguner / 2473人閱讀

摘要:表示在它下面列出來(lái)的資源只有在在線的情況下才能訪問(wèn),他們不會(huì)被離線存儲(chǔ),所以在離線情況下無(wú)法使用這些資源。不過(guò),如果在和中有一個(gè)相同的資源,那么這個(gè)資源還是會(huì)被離線存儲(chǔ),也就是說(shuō)的優(yōu)先級(jí)更高。離線的情況下,瀏覽器就直接使用離線存儲(chǔ)的資源。

最近由于找工作一直沒(méi)時(shí)間也沒(méi)有精力更新博客,找工作真是一件苦逼的事情啊。。。不抱怨了,我們來(lái)看看HTML5的新特性---離線存儲(chǔ)吧。

隨著Web App的發(fā)展,越來(lái)越多的移動(dòng)端App使用HTML5的方式來(lái)開發(fā),除了一些HybridApp以外,其他一部分Web App還是通過(guò)瀏覽器來(lái)訪問(wèn)的,通過(guò)瀏覽器訪問(wèn)就需要聯(lián)網(wǎng)發(fā)送請(qǐng)求,這樣就使得用戶在離線的狀態(tài)下無(wú)法使用App,同時(shí)Web App中一部分資源并不是經(jīng)常改變,并不需要每次都向服務(wù)器發(fā)出請(qǐng)求,出于這些原因,HTML5提出的一個(gè)新的特性:離線存儲(chǔ)。通過(guò)離線存儲(chǔ),我們可以通過(guò)把需要離線存儲(chǔ)在本地的文件列在一個(gè)manifest配置文件中,這樣即使在離線的情況下,用戶也可以正常使用App。

怎么用

首先來(lái)講解下離線存儲(chǔ)的使用方法,說(shuō)起來(lái)也很簡(jiǎn)單。只要在你的頁(yè)面頭部像下面一樣加入一個(gè)manifest的屬性就可以了。



...

然后cache.manifest文件的書寫方式,就像下面這樣:

CACHE MANIFEST
#v0.11

CACHE:

js/app.js
css/style.css

NETWORK:
resourse/logo.png

FALLBACK:
/ /offline.html

離線存儲(chǔ)的manifest一般由三個(gè)部分組成:
1.CACHE:表示需要離線存儲(chǔ)的資源列表,由于包含manifest文件的頁(yè)面將被自動(dòng)離線存儲(chǔ),所以不需要把頁(yè)面自身也列出來(lái)。
2.NETWORK:表示在它下面列出來(lái)的資源只有在在線的情況下才能訪問(wèn),他們不會(huì)被離線存儲(chǔ),所以在離線情況下無(wú)法使用這些資源。不過(guò),如果在CACHE和NETWORK中有一個(gè)相同的資源,那么這個(gè)資源還是會(huì)被離線存儲(chǔ),也就是說(shuō)CACHE的優(yōu)先級(jí)更高。
3.FALLBACK:表示如果訪問(wèn)第一個(gè)資源失敗,那么就使用第二個(gè)資源來(lái)替換他,比如上面這個(gè)文件表示的就是如果訪問(wèn)根目錄下任何一個(gè)資源失敗了,那么就去訪問(wèn)offline.html。

瀏覽器怎么解析manifest

那么瀏覽器是怎么對(duì)離線的資源進(jìn)行管理和加載的呢?這里需要分兩種情況來(lái)討論。

在線的情況下,瀏覽器發(fā)現(xiàn)html頭部有manifest屬性,它會(huì)請(qǐng)求manifest文件,如果是第一次訪問(wèn)app,那么瀏覽器就會(huì)根據(jù)manifest文件的內(nèi)容下載相應(yīng)的資源并且進(jìn)行離線存儲(chǔ)。如果已經(jīng)訪問(wèn)過(guò)app并且資源已經(jīng)離線存儲(chǔ)了,那么瀏覽器就會(huì)使用離線的資源加載頁(yè)面,然后瀏覽器會(huì)對(duì)比新的manifest文件與舊的manifest文件,如果文件沒(méi)有發(fā)生改變,就不做任何操作,如果文件改變了,那么就會(huì)重新下載文件中的資源并進(jìn)行離線存儲(chǔ)。

離線的情況下,瀏覽器就直接使用離線存儲(chǔ)的資源。

這個(gè)過(guò)程中有幾個(gè)問(wèn)題需要注意。

如果服務(wù)器對(duì)離線的資源進(jìn)行了更新,那么必須更新manifest文件之后這些資源才能被瀏覽器重新下載,如果只是更新了資源而沒(méi)有更新manifest文件的話,瀏覽器并不會(huì)重新下載資源,也就是說(shuō)還是使用原來(lái)離線存儲(chǔ)的資源。

對(duì)于manifest文件進(jìn)行緩存的時(shí)候需要十分小心,因?yàn)榭赡艹霈F(xiàn)一種情況就是你對(duì)manifest文件進(jìn)行了更新,但是http的緩存規(guī)則告訴瀏覽器本地緩存的manifest文件還沒(méi)過(guò)期,這個(gè)情況下瀏覽器還是使用原來(lái)的manifest文件,所以對(duì)于manifest文件最好不要設(shè)置緩存。

瀏覽器在下載manifest文件中的資源的時(shí)候,它會(huì)一次性下載所有資源,如果某個(gè)資源由于某種原因下載失敗,那么這次的所有更新就算是失敗的,瀏覽器還是會(huì)使用原來(lái)的資源。

在更新了資源之后,新的資源需要到下次再打開app才會(huì)生效,如果需要資源馬上就能生效,那么可以使用window.applicationCache.swapCache()方法來(lái)使之生效,出現(xiàn)這種現(xiàn)象的原因是瀏覽器會(huì)先使用離線資源加載頁(yè)面,然后再去檢查manifest是否有更新,所以需要到下次打開頁(yè)面才能生效。

咱們來(lái)試試吧

說(shuō)了這么多,不如自己動(dòng)手來(lái)試試。這里需要說(shuō)明的是,如果需要看到離線存儲(chǔ)的效果,那么你需要把你的網(wǎng)頁(yè)部署到服務(wù)器上,不管是本地還是生產(chǎn)環(huán)境服務(wù)器中,通過(guò)本地文件打開網(wǎng)頁(yè)是無(wú)法體驗(yàn)到離線存儲(chǔ)的。
我在我的電腦上跑了一個(gè)本地node服務(wù)器,通過(guò)localhost訪問(wèn)。我的manifest文件向下面這樣:

CACHE MANIFEST
#v0.11

CACHE:
lib/ionic/js/ionic.bundle.js
lib/angular-ui-router.js
js/app.js
lib/ionic/css/ionic.css
css/style.css
views/login_header.html
views/login.html
lib/ionic/fonts/ionicons.ttf?v=1.5.2
lib/ionic/fonts/ionicons.woff?v=1.5.2

NETWORK:
lib/ionic/fonts/ionicons.ttf?v=1.5.2
lib/ionic/fonts/ionicons.woff?v=1.5.2
css/style.css

然后我們?cè)L問(wèn)網(wǎng)頁(yè)看看效果。

可以看出瀏覽器根據(jù)manifest文件下載相應(yīng)資源并且緩存在本地,現(xiàn)在我們來(lái)試試再次訪問(wèn)網(wǎng)頁(yè)

資源已經(jīng)離線存儲(chǔ)在本地,所以瀏覽器不需要再次下載資源,可以直接使用本地緩存的資源。接著,我們更新下服務(wù)器上的資源,比如我修改下app.js,結(jié)果我這里就不顯示了,跟上面那張圖是一樣的,更新的資源并沒(méi)有生效,現(xiàn)在我們更新下manifest文件,比如把版本改為0.12

很顯然,只有更新了manifest文件,對(duì)離線資源的更新才能在瀏覽器上生效。
最后,我們來(lái)試試離線狀態(tài)下是什么情況,這才是離線存儲(chǔ)的重頭戲。通過(guò)Chrome設(shè)置離線狀態(tài),刷新頁(yè)面

由于在離線狀態(tài),所以瀏覽器無(wú)法訪問(wèn)到manifest文件,但是網(wǎng)頁(yè)還是可以正常訪問(wèn),這就是離線存儲(chǔ)的威力。
對(duì)于HTML5中離線存儲(chǔ)對(duì)象window.applicationCache有幾個(gè)事件需要我們關(guān)注下:

1.oncached:當(dāng)離線資源存儲(chǔ)完成之后觸發(fā)這個(gè)事件,這個(gè)是文檔的說(shuō)法,我在Chrome上面測(cè)試的時(shí)候并沒(méi)有觸發(fā)這個(gè)事件。
2.onchecking:當(dāng)瀏覽器對(duì)離線存儲(chǔ)資源進(jìn)行更新檢查的時(shí)候會(huì)觸發(fā)這個(gè)事件
3.ondownloading:當(dāng)瀏覽器開始下載離線資源的時(shí)候會(huì)觸發(fā)這個(gè)事件
4.onprogress:當(dāng)瀏覽器在下載每一個(gè)資源的時(shí)候會(huì)觸發(fā)這個(gè)事件,每下載一個(gè)資源就會(huì)觸發(fā)一次。
5.onupdateready:當(dāng)瀏覽器對(duì)離線資源更新完成之后會(huì)觸發(fā)這個(gè)事件
6.onnoupdate:當(dāng)瀏覽器檢查更新之后發(fā)現(xiàn)沒(méi)有資源更新的時(shí)候觸發(fā)這個(gè)事件

參考文章:
https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache
http://diveintohtml5.info/offline.html

最后,安利下我的個(gè)人博客,歡迎訪問(wèn): http://bin-playground.top

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/87649.html

相關(guān)文章

  • #yyds干貨盤點(diǎn)# 前端基礎(chǔ)知識(shí)面試集錦1

    摘要:作用標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別聲明位于位于文檔中的第一行,處于標(biāo)簽之前。又稱內(nèi)核及以上版本,等內(nèi)核及以上。存儲(chǔ)大小數(shù)據(jù)大小不能超過(guò)??梢苑乐箰阂馑⑵闭搲嗨行Х乐箤?duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力方式進(jìn)行不斷的登陸嘗試。 HTMLDoctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?(1)、聲明位于位于HT...

    番茄西紅柿 評(píng)論0 收藏2637
  • 前端面試題整理(定期更新)

    摘要:標(biāo)簽寫在后與前有什么區(qū)別什么是預(yù)處理器后處理器預(yù)處理器例如,用來(lái)預(yù)編譯或,增強(qiáng)了代碼的復(fù)用性,還有層級(jí)變量循環(huán)函數(shù)等,具有很方便的組件模塊化開發(fā)能力,極大的提高工作效率。 前言 因?yàn)槊嬖嚨脑?,最近又開始關(guān)注前端面試題,瀏覽過(guò)網(wǎng)上很多面試題集合,有很多小伙伴整理的很全面,但是我發(fā)現(xiàn)其中有很多技術(shù)點(diǎn)在當(dāng)下已不再流行,而面試題一般都是映射開發(fā)中常遇到的一些技能和問(wèn)題,再結(jié)合最近面試中遇到的...

    hizengzeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<