這個不算是 新增吧。
在湘東等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需設(shè)計網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,外貿(mào)網(wǎng)站建設(shè),湘東網(wǎng)站建設(shè)費用合理。
隨著現(xiàn)代瀏覽器的推動,F(xiàn)lash放棄對移動端的支持,HTML5無疑成為當(dāng)前Web前端炙手可熱的話題。各大游戲開發(fā)商、App開發(fā)商紛紛投入人力進行研究和技術(shù)儲備。相信不久的將來,HTML5會迎來一個快速發(fā)展和普及的春天。那么,HTML5這個新一代的標(biāo)準(zhǔn),又給我們帶來哪些緩存機制呢?
HTML5 之離線應(yīng)用Manifest
我們知道,使用傳統(tǒng)的技術(shù),就算是對站點的資源都實施了比較好的緩存策略,但是在斷網(wǎng)的情況下,是無法訪問的,因為入口的HTML頁面我們一般運維的考慮,不會對其進行緩存。HTML5的Cache Mainifest離線應(yīng)用特性就能夠幫助我們構(gòu)建離線也能使用的站點,所有的資源都使用瀏覽器本地緩存,當(dāng)然前提是要求在聯(lián)網(wǎng)的情形下使用過一次站點。
如何實現(xiàn)離線訪問特性
實現(xiàn)的步驟非常簡單,主要3個步驟:
1)在服務(wù)器上添加MIME TYPE支,讓服務(wù)器能夠識別manifest后綴的文件
AddType text/cache-manifest manifest
2)創(chuàng)建一個后綴名為.manifest的文件,把需要緩存的文件按格式寫在里面,并用注釋行標(biāo)注版本
CACHE MANIFEST
# 直接緩存的文件
CACHE:
Path/to/cache.js
# version:2012-03-20
3)給 html 標(biāo)簽加 manifest 屬性,并引用manifest文件
具體可以參考:HTML5 緩存: cache manifest
html manifest=”path/to/name-of.manifest”
離線應(yīng)用訪問及更新流程
第一次訪問離線應(yīng)用的入口頁HTML(引用了manifest文件),正常發(fā)送請求,獲取manifest文件并在本地緩存,陸續(xù)拉取manifest中的需要緩存的文件
再次訪問時,無法在線離線與否,都會直接從緩存中獲取入口頁HTML和其他緩存的文件進行展示。如果此時在線,瀏覽器會發(fā)送請求到服務(wù)器請求manifest文件,并與第一次訪問的副本進行比對,如果發(fā)現(xiàn)版本不一致,會陸續(xù)發(fā)送請求重新拉取入口文件HTML和需要緩存的文件并更新本地緩存副本
之后的訪問重復(fù)第2步的行為
離線機制的緩存用途
從Manifest的機制來看,即使我們不是為了創(chuàng)建離線應(yīng)用,也同樣可以使用這種機制用于緩存文件,可以說是給Web緩存提供多一種可以選擇的途徑。
存在的問題:緩存文件更新控制不靈活
就目前HTML5提供的manifest機制來講,一個頁面只能引用一個manifest頁面,而且一旦發(fā)現(xiàn)這個manifest改變了,就會把里面所有定義的緩存文件全部重新拉取一遍,不管實際上有沒有更新,控制比較不靈活。針對這個問題,也有的同學(xué)提出了一些建議,比如把需要緩存的文件分模塊切分到不同manifest中,并分開用HTML引用,再使用強大的iframe嵌入到入口頁面,這樣就當(dāng)某一個模式需要有更新,不會導(dǎo)致其他模塊的文件也重新拉取一遍。
HTML5 之本地存儲localstorage
HTML5給我們提供本地存儲localstorage特性,嚴(yán)格來講,其實已經(jīng)不算傳統(tǒng)Web緩存的范疇。因為它存儲的地方是跟Web緩存分開的,是瀏覽器重新開辟的一個地方。
localstorage的作用
本地存儲localstorage的作用主要使Web頁面能夠通過瀏覽器提供的set/get接口,存儲一些自定義的信息到本地硬盤,并且在單次訪問或以后的訪問過程中隨時獲取或修改。
Localstorage的使用
Localstorage提供了幾個非常易用的Api,setItem/getItem/removeItem/clear,具體的可以參考:Html5 Step by Step(二) 本地存儲
Localstorage的緩存用途
Localstorage設(shè)計的本意可能是用來存儲一些用戶操作的個性化設(shè)置的文本類型的信息和數(shù)據(jù),當(dāng)我們其實也可能拿來當(dāng)Web緩存區(qū)使用,比如我們可以將Base64格式編碼的圖片信息,存在localstorage中,再次訪問時,直接本地獲取后,使用Css3的Data:image的方式直接展現(xiàn)出來。
存在的問題:大小限制
按照目前標(biāo)準(zhǔn),目前瀏覽器只給每個獨立的域名提供5m的存儲空間,當(dāng)存儲超過5m,瀏覽器就會彈出警告框。
可以說,HTML5的Manifest和localstorage是給我們在考慮Web緩存的時候提供了多一種思路,當(dāng)你開發(fā)的應(yīng)用只面對現(xiàn)代瀏覽器的時候,不妨可以考慮一下
html5離線存儲緩存列表可以動態(tài)生成
最簡單來說,一個離線網(wǎng)絡(luò)應(yīng)用程序就是一個URL的列表——HTML,CSS,JavaScript,圖片,或者其他類型的資源。離線網(wǎng)絡(luò)應(yīng)用程序的主要指向一個叫做名單文件并用于定位網(wǎng)絡(luò)服務(wù)器上的資源列表。用于執(zhí)行HTML5離線以用程序的網(wǎng)絡(luò)瀏覽器將從名單文件中讀取URL列表,下載這些資源,將他們在本地緩存,并自動在這些本地副本改變時保持他們更新。當(dāng)你嘗試在沒有網(wǎng)絡(luò)連接時訪問網(wǎng)絡(luò)應(yīng)用程序,你的網(wǎng)絡(luò)瀏覽器將自動切換并使用本地代替。
最新的主流的瀏覽器中都已添加了對HTML5的offlineStorage功能的支持,HTML5離線存儲功能非常強大,它的作用是:在用戶沒有與因特網(wǎng)連接時,照樣可以訪問站點或應(yīng)用,在用戶與因特網(wǎng)連接時,自動更新緩存數(shù)據(jù),是我們的網(wǎng)站的適應(yīng)性和應(yīng)用型更強!
例如一些在線游戲的某些文件可以使用離線存儲緩存到本地,這樣就不用每次刷新頁面都要下載了。對于傳統(tǒng)的瀏覽器緩存是無法控制的,瀏覽器有自己的緩存規(guī)則,我們無法實現(xiàn)緩存什么不緩存什么。但是使用離線存儲可以緩存任何內(nèi)容,包括可以自定義哪些可以被緩存,哪些必須聯(lián)網(wǎng)才能訪問。
離線存儲所保存的不是應(yīng)用中的某些數(shù)據(jù),而是站點的某個些文件的副本,即html頁面或圖片等,而不是僅僅存儲一段json或xml。
原理:HTML5的離線存儲是基于一個新建的.appcache文件的,通過這個文件上的解析清單離線存儲資源,這些資源就會像cookie一樣被存儲了下來。之后當(dāng)網(wǎng)絡(luò)在處于離線狀態(tài)下時,瀏覽器會通過被離線存儲的數(shù)據(jù)進行頁面展示。
方法:
1.在index.html里加上html manifest="test.manifest"
2.manifest清單格式如下:
CACHE MANIFEST
#上面一句必須
#v1.0.0
#需要緩存的文件
CACHE:
a.js
b.css
#不需要緩存的文件
NETWORK:
*
#無法訪問頁面
FALLBACK:
404.html
3.manifest文件的mime-type必須是 text/cache-manifest類型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
HTML5離線存儲和本地緩存
一.離線存儲
有一個web應(yīng)用有三個文件index.html,a.js,b.css,現(xiàn)在需要把js和css文件緩存起來
1.在index.html里加上html manifest="test.manifest"
2.manifest清單格式如下
CACHE MANIFEST
#上面一句必須
#v1.0.0
#需要緩存的文件
CACHE:
a.js
b.css
#不需要緩存的文件
NETWORK:
*
#無法訪問頁面
FALLBACK:
404.html
3.manifest文件的mime-type必須是 text/cache-manifest類型
注意點:
1.對于每個index.html?id=1或index.html?id=2都會分別緩存index.html頁面,可以通過chrome瀏覽器Resources/Application Cache觀察
2.如果想更新緩存內(nèi)容,只要修改下manifest文件即可,如改版本號v1.0.1
4.離線存儲如果資源有更新,可以通過如下代碼來監(jiān)聽,但第一次加載還會是原來的版本
window.applicationCache.addEventListener('updateready',function(e){
if(window.applicationCache.status == window.applicationCache.UPDATEREADY){
window.applicationCache.swapCache();
if(confirm("loding new?")){
window.location.reload()
}
}
},false)
二.本地緩存
localStorage.setItem("key","value")
localStorage.getItem("key","value")
localStorage.removeItem("key")
localStorage.clear()
1.本地存儲永不過期,除非自己去清除
2.可以通過chrome瀏覽器Resources/Local Storage來查看
3.不同域下就算key相同取不到的值也不同,如localhost和127.0.0.1
需要服務(wù)器。這里用tomcat服務(wù)器來講解。
首先要先把.manifest后綴的文件 的mine類型配置為text/cache-manifest。
一講到tomcat配置,熟悉的朋友自然就會想到web.xml這個文件,沒錯,在文件中加入如下配置就行:
1 mime-mapping
2 extensionmanifest/extension
3 mime-typetext/cache-manifest/mime-type
4 /mime-mapping
然后寫一個xxx.manifest文件,xxx是你自己取的一個名字。這個文件的格式是這樣的:
CACHE MANIFEST
#version 1.5
CACHE:
MyTest.html
CSS/main.css
Javascript/bwH5LS.js
exp-calif-logo.gif
第一行是必須的,它標(biāo)識這是manifest的配置文件。
#version 1.5
這句是注釋,沒實際的作用,我在這里只是想讓瀏覽器更新緩存文件。因為當(dāng)這個manifest文件與原來一樣的時候,瀏覽器是不會去重新加載緩存文件的,所以我們可以通過這個注釋,一方面修改版本號,另一方面讓瀏覽器更新緩存。
CACHE:
這行指示出下面的文件是要緩存的。示例中,緩存了當(dāng)前頁面:MyTest.html,以及一些css和js文件 還有圖片。
還有幾個關(guān)鍵字示例中沒提到,就是
NETWORK:
FALLBACK:
NETWORK 指不想緩存的頁面;FALLBACK 是指請求的文件 沒有找到或該文件的服務(wù)器沒有響應(yīng)時的替代方案,比如我們想請求某個嵌套頁面,但這個頁面的服務(wù)器連接不上了,那么我可以轉(zhuǎn)向另外一個指定的頁面。
這是第二步,第三步,只要在html標(biāo)簽中加上manifest的位置就行了:
html manifest="NAME.manifest"
到這里,就可以實現(xiàn)簡單的離線應(yīng)用了。
那些緩存的文件放在哪呢?
在chrome上測試,發(fā)現(xiàn)它是按自己的機制來分塊保存這些文件的,所以我沒找不到完整的文件。保存的數(shù)據(jù)在:
C:\Users\jasonling\AppData\Local\Google\Chrome\User Data\Default 里面,具體怎么存,筆者還不了解。
火狐上的文件也是按它自己的機制來存的,不過筆者本人用sqlite打開后,找到了緩存文件的具體信息: