




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第7章HTML5的離線緩存7.1APPCache7.2ServiceWorker
HTML5在新特性中增加了離線緩存,可以簡單地理解為瀏覽器在第一次加載頁面后將相關(guān)資源下載到本地并保存在緩存中,在沒有清除緩存的前提下,下一次打開頁面時,就算沒有網(wǎng)絡(luò)也可以正常顯示。這個功能在網(wǎng)絡(luò)發(fā)達的今天看似無關(guān)緊要,但是它確實是一個提升用戶體驗的非常重要的手段。另一方面,隨著移動互聯(lián)網(wǎng)越來越普及,在移動端采用Web技術(shù)解決跨平臺、快速部署、快速發(fā)布的方案也越來越多。但對于以Web方式實現(xiàn)的APP來說,又面臨著對網(wǎng)絡(luò)的強依賴、對網(wǎng)速和流量有較高要求等一系列問題,而離線緩存對于這一類問題提供了非常好的解決方案。
離線緩存為頁面帶來的優(yōu)勢包括以下內(nèi)容:
●
離線瀏覽。用戶可在離線時正常打開被緩存的頁面。
●
速度更快。已緩存資源只需本地直接打開,不用再從服務(wù)器下載,從而加載速度更快。
●
減少服務(wù)器負(fù)載。瀏覽器只從服務(wù)器下載更新過的資源,從而減輕服務(wù)器負(fù)擔(dān)。
HTML5標(biāo)準(zhǔn)中,提供了兩套離線緩存方案:APPCache和ServiceWorkers。
7.1APPCache
APPCache中文翻譯為應(yīng)用程序緩存,是HTML5標(biāo)準(zhǔn)中提供的一種緩存方式,具體表現(xiàn)為當(dāng)請求某個文件時不是優(yōu)先從網(wǎng)絡(luò)獲取該文件,而是先從本地獲取,再對比網(wǎng)絡(luò)中的版本進行更新(如果網(wǎng)絡(luò)可用)。
APPCache的特點是簡單易用,開發(fā)者不需要過多的操作,只需列明要緩存的文件即可完成頁面緩存功能。同時,它的瀏覽器支持情況也相對較好。
7.1.1瀏覽器支持情況
除了InternetExplorer9(IE9)及更早的版本外,所有主流瀏覽器均支持APPCache。我們可以通過以下代碼檢測瀏覽器是否支持APPCache。
7.1.2使用APPCache實現(xiàn)頁面緩存
使用APPCache實現(xiàn)頁面緩存非常簡單,我們只需要通過以下三步即可輕松實現(xiàn)。
1.在html標(biāo)簽中添加manifest屬性
每個指定了manifest屬性的頁面在用戶對其訪問時都會被緩存。如果未指定,則頁面不會被緩存(除非在manifest文件中直接指定了該頁面)。
在manifest屬性的值中引入一個后綴名為“.appcache”的文件,這個文件一般放在JavaScript目錄中,是一個manifest文件,其實該文件是一個純文本文件,后綴名可自定義,但官方標(biāo)準(zhǔn)建議使用“.appcache”作為后綴名,它的作用是告訴瀏覽器哪些文件需要被緩存,哪些文件不會被緩存等。例如:
2.編寫manifest文件
manifest文件可分為以下3部分:
●
CACHEMANIFEST:在此標(biāo)題下列出的文件將在首次下載后進行緩存。
●
NETWORK:在此標(biāo)題下列出的文件需要與服務(wù)器連接,且不會被緩存。
●
FALLBACK:在此標(biāo)題下列出的文件規(guī)定當(dāng)頁面無法訪問時的回退頁面(比如404頁面)。
一個完整的manifest文件代碼如下:
NETWORK是可選的,上面的manifest文件規(guī)定文件login.asp永遠(yuǎn)不會被緩存,且離線時是不可用的;同時可以使用“*”來指示其他所有文件離線不可用。例如:
3.更新緩存
一旦應(yīng)用被緩存,它就會保持緩存直到發(fā)生下列情況:
●
用戶清空瀏覽器緩存。
●
manifest文件被修改(如修改日期和版本號)。
●由程序來更新應(yīng)用緩存,可以使用“applicationCache.update()”方法來主動更新緩存內(nèi)容。
7.1.3APPCacheAPI
APPCacheAPI提供了相關(guān)的屬性、方法和事件,我們可以通過window.applicationCache來對緩存內(nèi)容進行訪問,通過監(jiān)控APPCacheAPI事件來對緩存的過程進行簡單的控制。
1.緩存狀態(tài)
applicationCache.status屬性可用于查看緩存的當(dāng)前狀態(tài),返回值及說明如下:
●
0:未緩存。
●
1:空閑(緩存為最新狀態(tài))。
●
2:檢查中。
●
3:下載中。
●
4:更新就緒。
●
5:緩存過期。
2.主動更新緩存方法
applicationCache.update()方法可主動更新已緩存的文件。
3.緩存相關(guān)的事件
APPCacheAPI提供的事件及其說明列舉如下:
●
updateready事件:當(dāng)有新的緩存,并更新完以后,會觸發(fā)此事件。
●
progress事件:當(dāng)有新的緩存,并處于正在下載的過程中時,會不斷觸發(fā)此事件。progress事件中的event對象包含loaded和total,loaded代表當(dāng)前已經(jīng)加載完成的文件,total為總共需要更新的文件數(shù)。
●
checking事件:當(dāng)正在檢查有沒有新的緩存時,會觸發(fā)此事件。
●
downloading事件:當(dāng)正在下載文件時,會觸發(fā)此事件。
●
obsolete事件:當(dāng)緩存過期時,會觸發(fā)此事件。
●
cached事件:當(dāng)緩存為最新狀態(tài)時,會觸發(fā)此事件。
●
error事件:當(dāng)緩存過程中報錯時,會觸發(fā)此事件。
●
noupdate事件:當(dāng)檢查更新結(jié)束,沒有新的緩存需要更新時,會觸發(fā)此事件。
7.1.4其他注意事項
APPCache雖然有著諸多優(yōu)勢,但也有一些設(shè)計上的缺陷。下面列出一些在開發(fā)過程中經(jīng)常出現(xiàn)的問題,希望大家在使用的過程中注意規(guī)避。
●
瀏覽器對緩存數(shù)據(jù)的容量限制可能不太一樣(某些瀏覽器設(shè)置的限制是每個站點5
MB)。
●
如果manifest文件或者內(nèi)部列舉的某一個文件不能正常下載,整個更新過程都將失敗,瀏覽器全部繼續(xù)使用舊的緩存。
●
引用manifest的html必須與manifest文件同源,在同一個域下。
●
FALLBACK中的資源必須和manifest文件同源。
●
當(dāng)一個資源被緩存后,該瀏覽器直接請求這個絕對路徑也會訪問緩存中的資源。
●
站點中的其他頁面即使沒有設(shè)置manifest屬性,請求的資源如果在緩存中也從緩存中訪問。
●
當(dāng)manifest文件發(fā)生改變時,資源請求本身也會觸發(fā)更新。
●
被緩存的頁面如果是動態(tài)頁面(如jsp頁面),其中的內(nèi)容將不會動態(tài)地從服務(wù)器中獲取。此時的解決辦法一般是使用ajax異步來獲取服務(wù)器中的數(shù)據(jù)進行替換。
7.2ServiceWorkers
ServiceWorkers是谷歌Chrome團隊提出并大力推廣的一項Web技術(shù)。在2015年,它加入到W3C標(biāo)準(zhǔn),進入草案階段,目前已經(jīng)發(fā)展成熟,被各大瀏覽器廠商支持,進入了實際應(yīng)用階段。
ServiceWorkers可以理解為充當(dāng)應(yīng)用(頁面)與服務(wù)器之間的代理服務(wù)器,可以用于攔截請求,也就意味著可以在離線環(huán)境下響應(yīng)請求,從而提供更好的離線體驗。
相比APPCache的簡單易用,ServiceWorkers的特點是功能強大,由事件驅(qū)動,可以攔截請求、緩存這些請求的響應(yīng)數(shù)據(jù)等,能實現(xiàn)的效果更加靈活。同時,它也有一些不足,如它是基于HTTPS協(xié)議的,你需要把你的網(wǎng)站升級成HTTPS協(xié)議的網(wǎng)站才能使用它;它又是WebWorkers中的一種,因此它不能夠直接操作DOM對象等。
7.2.1瀏覽器支持檢測
目前,除了InternetExplorer(IE)外,所有最新版主流瀏覽器均支持ServiceWorkers。我們可以通過以下代碼檢測瀏覽器是否支持ServiceWorkers。
7.2.2ServiceWorkers生命周期
ServiceWorkers能夠提供離線緩存,這就好比已經(jīng)在瀏覽器中安裝了某個軟件,無論是否有網(wǎng)絡(luò)連接都可以隨時打開使用。用戶首次訪問ServiceWorker控制的網(wǎng)站或頁面時,會使用ServiceWorkerContainer.register()方法進行注冊,如果注冊成功,ServiceWorker就會被下載到客戶端并嘗試安裝或激活,它能作用于整個域內(nèi)用戶可訪問的URL,或者其特定子集。
ServiceWorker遵循如圖7-1所示的生命周期。
圖7-1ServiceWorker初次安裝生命周期
●注冊(register):用戶首次訪問ServiceWorker控制的網(wǎng)站或頁面時,會檢測ServiceWorker是否已安裝,沒有安裝時則需要先注冊,注冊時需要一個專門的ServiceWorker處理文件。
●
下載(download):用戶首次訪問ServiceWorker控制的網(wǎng)站或頁面時,ServiceWorker會立刻被下載。之后,至少每24小時它就會被重新下載一次。它可能會被更頻繁地下載,但每24小時必定會被下載一次,以避免不良腳本長時間生效。
●安裝(install):注冊成功后,ServiceWorker會觸發(fā)install事件進行安裝。之后,每次ServiceWorker被重新下載后都會與現(xiàn)有的進行字節(jié)對比,如果發(fā)現(xiàn)有不同,則會再次觸發(fā)install事件重新安裝。
7.2.3ServiceWorkers基本用法
和其他Worker一樣,ServiceWorker有一個獨自的文件。由于之前所提到的ServiceWorker只能作用在自己存放位置之下的文件,因此,一般在應(yīng)用根目錄下存放ServiceWorker文件。
1.注冊ServiceWorker
之前提到過,注冊ServiceWorker時需要一個專門的處理文件,在這個處理文件中的第一塊代碼應(yīng)該是我們使用ServiceWorker的入口。代碼如下:
首先,我們使用之前提供的特性檢測代碼來判斷瀏覽器是否支持ServiceWorkers,以便在注冊之前確保瀏覽器對ServiceWorkers是支持的。
接著,我們使用ServiceWorkerContainer.register()函數(shù)來注冊站點的ServiceWorker,它是一個駐留在我們網(wǎng)站內(nèi)的JavaScript文件。
然后,.then()函數(shù)鏈?zhǔn)秸{(diào)用我們的promise,當(dāng)出現(xiàn)promiseresolve的時候,里面的代碼就會被執(zhí)行。
最后,我們鏈接了一個.catch()函數(shù),當(dāng)出現(xiàn)promiserejected時才會執(zhí)行。
這樣就注冊了一個ServiceWorker,它工作在WorkerContext中,所以沒有訪問DOM的權(quán)限。在正常的頁面之外,運行ServiceWorker的代碼來控制它們的加載。
單個ServiceWorker可以控制很多頁面,需要小心ServiceWorker腳本里的全局變量,每個頁面不會有自己獨有的Worker。
2.安裝和激活
在ServiceWorker注冊之后,瀏覽器會嘗試安裝并激活它。其代碼如下:
3.自定義請求的響應(yīng)
現(xiàn)在,站點資源已經(jīng)被緩存了,我們需要告訴ServiceWorker讓它用這些緩存內(nèi)容來做點什么。有了fetch事件,這就很容易做到。
可以給ServiceWorker添加一個fetch的事件監(jiān)聽器,接著調(diào)用event上的respondWith()方法來攔截HTTP響應(yīng),然后用自己的程序來更新它們。
也可以使用caches.match(event.request)對網(wǎng)絡(luò)請求的資源和cache里可獲取的資源進行匹配,查看緩存中是否有相應(yīng)的資源。這個匹配通過URL和varyheader進行,就像正常的HTTP請求一樣。
4.恢復(fù)失敗的請求
在ServiceWorkercache里有匹配的資源時,caches.match(ev
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 艦橋上行走的規(guī)則
- 城市綜合管廊建設(shè)與管理解決方案
- 環(huán)境科學(xué)中關(guān)于全球氣候變化試題
- 企業(yè)ERP系統(tǒng)集成服務(wù)項目合同
- 地理信息系統(tǒng)應(yīng)用知識點梳理與考核試題集
- 建筑結(jié)構(gòu)與建筑設(shè)計練習(xí)題庫
- 現(xiàn)代管理學(xué)原理應(yīng)用問題解析題
- 企業(yè)研發(fā)投入與轉(zhuǎn)化效率對比表
- 建筑工程施工承包協(xié)議
- 個性化學(xué)習(xí)服務(wù)平臺構(gòu)建及實施方案設(shè)計
- 師德師風(fēng)培訓(xùn)筆記
- 養(yǎng)老護理練習(xí)題庫(含答案)
- 醫(yī)療廢物相關(guān)法律法規(guī)培訓(xùn)課件
- 特種設(shè)備生產(chǎn)和充裝單位許可規(guī)則
- 女生自尊自愛知識講座
- 2025年兒童青少年近視防控白皮書
- 小學(xué)生春季傳染病預(yù)防
- deepseek在智慧城市建設(shè)中的應(yīng)用前景
- 2024黑龍江公務(wù)員考試【A類、B類、省直、筆試】四套真題及答案
- 2025年九江職業(yè)大學(xué)高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 第七章 力 達標(biāo)測試卷(含答案)2024-2025學(xué)年度人教版物理八年級下冊
評論
0/150
提交評論