Html5 引入了應用程式緩存,這意味著web應用程式可以進行緩存,並且可以在沒有網路連線的時候進行存取。
首先manifest是一個後綴名為minifest
或appcache
,的文件,在檔案中定義那些需要快取的文件,支援manifest的瀏覽器,會依照manifest檔案的規則,像檔案保存在本地,從而在沒有網路連結的情況下,也能存取頁面。
當我們第一次正確配置appcache後,當我們再次訪問應用時,瀏覽器會先檢查manifest檔是否有變動,如果有變動就會把對應的變成跟新下來,同時改變瀏覽器裡面的appcache,如果沒有變動,就會直接把appcache的資源回傳,基本流程是這樣的。
(1) 離線瀏覽:使用者可以在應用離線時使用它們
(2) 速度更快:已快取資源,載入得更快
(2) 速度更快:已減少快取資源,載入得更快(3) 減少快取伺服器負載:瀏覽器只需從伺服器刪下載更改過或更新的資源就可以了。 二、如何使用有一個web應用有三個檔案index.html,a.js,b.css,現在需要把js和css檔案快取起來
test.manifest清單格式如下
CACHE MANIFEST #上面一句必须 #v1.0.0 #需要缓存的文件 CACHE: a.js b.css #不需要缓存的文件 NETWORK: * #无法访问页面 FALLBACK: 404.html
型別
manifest : CACHE, NETWORK,與FALLBACK,其中NETWORK和FALLBACK為可選項。 而第一行CACHE MANIFEST為固定格式,必須寫在前面。以#號開頭的是註釋,一般會在第二行寫個版本號,用來在快取的文件更新時,更改manifest的作用,可以是版本號,時間戳或者md5碼等等。
CACHE:(必須)
標識出哪些檔案需要緩存,可以是相對路徑也可以是絕對路徑。
CACHE: a.css //m.sbmmt.com/
NETWORK:(可選)
這一部分是要繞過快取直接讀取的文件,可以使用通配符*。下面的程式碼「login.asp」 永遠不會被緩存,離線時是不可用的:
NETWORK: login.asp
NETWORK:*
FALLBACK:(可選)
指定了一個後備頁面,當資源無法存取時,瀏覽器會使用該頁面。該段落的每筆記錄都列出兩個URI—第一個表示資源,第二個表示後備頁面。兩個 URI 都必須使用相對路徑並且與清單檔案同源。可以使用通配符。 下面的範例中,如果無法建立因特網連接,則以 “404.html” 取代 /html5/ 目錄中的所有檔案。FALLBACK: /html5/ /404.html
FALLBACK:*.html /404.html
都可更新緩存,如果我們更改了js,而沒有新增或刪除,前面例子中註釋中的版本號,可以很好的用來更新manifest檔。
window.applicationCache.update();
如果使用者清除了瀏覽器快取(手動或用其他一些工具)都會重新下載檔案。
注意事項
如果manifest文件,或是內部列舉的某一個文件不能正常下載,整個更新過程都將失敗,瀏覽器繼續全部使用舊的快取。
引用manifest的html必須與manifest檔同源,在同一個網域下。
FALLBACK中的資源必須和manifest檔同源。
當一個資源被快取後,該瀏覽器直接請求這個絕對路徑也會存取快取中的資源。
網站中的其他頁面即使沒有設定manifest屬性,請求的資源如果在快取中也從快取中存取。
當manifest檔案改變時,資源請求本身也會觸發更新。
對於每個index.html?id=1或index.html?id=2都會分別快取index.html頁面,可以透過chrome瀏覽器
Resources/Application Cache如果想要更新快取內容,只要修改下manifest檔案即可,如改版本號v1.0.1
離線儲存如果資源有更新,可以透過以下程式碼來監聽,但第一次載入還會是原來的版本
window.applicationCache.addEventListener('updateready',function(e){ if(window.applicationCache.status == window.applicationCache.UPDATEREADY){ window.applicationCache.swapCache(); if(confirm("loding new?")){ window.location.reload() } } },false);
Html5 引入了应用程序缓存,这意味着web应用可以进行缓存,并且可以在没有网络连接的时候进行访问。
首先manifest是一个后缀名为minifest
或者appcache
,的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本地,从而在没有网络链接的情况下,也能访问页面。
当我们第一次正确配置appcache后,当我们再次访问该应用时,浏览器会首先检查manifest文件是否有变动,如果有变动就会把相应的变得跟新下来,同时改变浏览器里面的appcache,如果没有变动,就会直接把appcache的资源返回,基本流程是这样的。
(1) 离线浏览:用户可以在应用离线时使用它们
(2) 速度更快:已缓存资源,加载得更快
(3) 减少服务器负载:浏览器只需从服务器删下载更改过或更新过的资源就可以了。
有一个web应用有三个文件index.html,a.js,b.css,现在需要把js和css文件缓存起来
1.在index.html里加上<html manifest="test.manifest">
2.test.manifest
清单格式如下
CACHE MANIFEST #上面一句必须 #v1.0.0 #需要缓存的文件 CACHE: a.js b.css #不需要缓存的文件 NETWORK: * #无法访问页面 FALLBACK: 404.html
3.manifest文件的mime-type必须是 text/cache-manifest
类型
manifest文件,基本格式为三段: CACHE, NETWORK,与 FALLBACK,其中NETWORK和FALLBACK为可选项。
而第一行CACHE MANIFEST为固定格式,必须写在前面。
以#号开头的是注释,一般会在第二行写个版本号,用来在缓存的文件更新时,更改manifest的作用,可以是版本号,时间戳或者md5码等等。
CACHE:(必须)
标识出哪些文件需要缓存,可以是相对路径也可以是绝对路径。
CACHE: a.css //m.sbmmt.com/
NETWORK:(可选)
这一部分是要绕过缓存直接读取的文件,可以使用通配符*。
下面的代码 “login.asp” 永远不会被缓存,且离线时是不可用的:
NETWORK: login.asp
可以使用星号来指示所有其他资源/文件都需要因特网连接:NETWORK:*
FALLBACK:(可选)
指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。该段落的每条记录都列出两个URI—第一个表示资源,第二个表示后备页面。两个 URI 都必须使用相对路径并且与清单文件同源。可以使用通配符。
下面的例子中,如果无法建立因特网连接,则用 “404.html” 替代 /html5/ 目录中的所有文件。
FALLBACK: /html5/ /404.html
下面的例子中,则用 “404.html” 替代所有文件。
FALLBACK:*.html /404.html
如下三种方式,可以更新缓存:
更新manifest文件
通过javascript操作
清除浏览器缓存
给manifest添加或删除文件,都可更新缓存,如果我们更改了js,而没有新增或删除,前面例子中注释中的版本号,可以很好的用来更新manifest文件。
html5中引入了js操作离线缓存的方法,下面的js可以手动更新本地缓存。
window.applicationCache.update();
如果用户清除了浏览器缓存(手动或用其他一些工具)都会重新下载文件。
浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。
如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程都将失败,浏览器继续全部使用老的缓存。
引用manifest的html必须与manifest文件同源,在同一个域下。
FALLBACK中的资源必须和manifest文件同源。
当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。
站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问。
当manifest文件发生改变时,资源请求本身也会触发更新。
对于每个index.html?id=1或index.html?id=2都会分别缓存index.html页面,可以通过chrome浏览器Resources/Application Cache
观察
如果想更新缓存内容,只要修改下manifest文件即可,如改版本号v1.0.1
离线存储如果资源有更新,可以通过如下代码来监听,但第一次加载还会是原来的版本
window.applicationCache.addEventListener('updateready',function(e){ if(window.applicationCache.status == window.applicationCache.UPDATEREADY){ window.applicationCache.swapCache(); if(confirm("loding new?")){ window.location.reload() } } },false);
以上就是html5的离线缓存的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!