首頁  >  文章  >  web前端  >  html5的離線緩存

html5的離線緩存

黄舟
黄舟原創
2017-02-16 14:39:351282瀏覽


Html5 引入了應用程式緩存,這意味著web應用程式可以進行緩存,並且可以在沒有網路連線的時候進行存取。

1.1 什麼是Cache Manifest

首先manifest是一個後綴名為minifestappcache,的文件,在檔案中定義那些需要快取的文件,支援manifest的瀏覽器,會依照manifest檔案的規則,像檔案保存在本地,從而在沒有網路連結的情況下,也能存取頁面。

當我們第一次正確配置appcache後,當我們再次訪問應用時,瀏覽器會先檢查manifest檔是否有變動,如果有變動就會把對應的變成跟新下來,同時改變瀏覽器裡面的appcache,如果沒有變動,就會直接把appcache的資源回傳,基本流程是這樣的。

1.2 應用程式快取的優點:

(1) 離線瀏覽:使用者可以在應用離線時使用它們

(2) 速度更快:已快取資源,載入得更快

(2) 速度更快:已減少快取資源,載入得更快

(3) 減少快取伺服器負載:瀏覽器只需從伺服器刪下載更改過或更新的資源就可以了。

二、如何使用

有一個web應用有三個檔案index.html,a.js,b.css,現在需要把js和css檔案快取起來

1.在index.html裡加

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
http://www.php.cn/

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操作取出

    都可更新緩存,如果我們更改了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 引入了应用程序缓存,这意味着web应用可以进行缓存,并且可以在没有网络连接的时候进行访问。

1.1 什么是Cache Manifest

首先manifest是一个后缀名为minifest或者appcache,的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本地,从而在没有网络链接的情况下,也能访问页面。

当我们第一次正确配置appcache后,当我们再次访问该应用时,浏览器会首先检查manifest文件是否有变动,如果有变动就会把相应的变得跟新下来,同时改变浏览器里面的appcache,如果没有变动,就会直接把appcache的资源返回,基本流程是这样的。

1.2 应用缓存的优势:

(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
http://www.php.cn/

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中文网(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn