首頁 web前端 H5教程 html5離線應用application cache的程式碼詳解

html5離線應用application cache的程式碼詳解

Apr 01, 2017 am 11:09 AM

一、應用程式場景

     我們通常使用瀏覽器緩存在使用者磁碟上儲存web單頁,在使用者再次瀏覽的時候已節省頻寬,但即便這樣,依然無法在沒有Internet的情況下存取Web。為了讓web應用程式在離線狀態也能被存取。 html5透過application cache API提供離線儲存功能。前提是你需要造訪的web頁面至少被線上訪問過一次。

    離線本地儲存和傳統的瀏覽器快取有什麼不同呢?

    1、瀏覽器快取主要包含兩類:

##         a.快取協商:Last-modified,Etag

             

             

           沒有修改就回傳304,瀏覽器直接瀏覽本機快取檔案。否則伺服器傳回新內容。

         b.徹底快取:cache-control,Expires

               透過Expires設定快取時間失效,且在失效之前不需要再跟伺服器請求互動。

   2、離線儲存為整個web提供服務,瀏覽器快取只快取單一頁面;

   3、離線儲存可以指定需要快取的檔案和哪些檔案只能在線上瀏覽,瀏覽器快取無法指定;

   4、離線儲存可以動態通知使用者進行

更新

二、如何實現

    離線儲存是透過manifest檔案來管理的,需要伺服器端的支持,不同的伺服器開啟支援的方式也是不同的。

CACHE MANIFEST//必须以这个开头
version 1.0 //最好定义版本,更新的时候只需修改版本号
CACHE:
    m.png
    test.js
    test.css
NETWORK:
    *
FALLBACK
    online.html offline.html
登入後複製
    CACHE指定需要快取的文件;NETWORK指定只有透過連網才能瀏覽的文件,*代表除了在CACHE中的文件;FALLBACK每行分別指定在線和離線時使用的文件    要讓manifest管理存儲,還需要在html標籤

中定義manifest

屬性

,如下:

<span style="color: #0000ff;"><!</span><span style="color: #ff00ff;">DOCTYPE HTML</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"><</span><span style="color: #800000;">html </span><span style="color: #ff0000;"><a href="http://www.php.cn/java/java-ymp-Lang.html" target="_blank">lang</a></span><span style="color: #0000ff;">="en"</span><span style="color: #ff0000;"> manifest</span><span style="color: #0000ff;">=&#39;test.manifest&#39;</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"><</span><span style="color: #800000;"><a href="http://www.php.cn/html/html-HEAD-2.html" target="_blank">head</a></span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"><</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">char<a href="http://www.php.cn/code/8209.html" target="_blank">set</a></span><span style="color: #0000ff;">="UTF-8"</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"><</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"></</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"><</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span><br/><br/><span style="color: #0000ff;"></</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span><br/><span style="color: #0000ff;"></</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span>
登入後複製

    最後別忘了,這些應用程式需要伺服器支援。


    Apache伺服器開啟支援的方式是:在conf/mime.types中新增一段程式碼:

            test/cache-manifest manifest
登入後複製

    IIS伺服器開啟方式:

#          1  右鍵--HT##         ---MIME映射下,按一下檔案類型---新建---副檔名輸入manifest,在類型中輸入test/cache-manifest

 三、透過JS動態控制更新     applicationCache

物件

提供個了一些方法和

事件

,管理離線儲存的互動過程。透過在firefox8.0的控制台中輸入window.applicationCache可以看到這個物件的所       有屬性和事件方法。

applicationCache.onchecking = function(){
   //检查manifest文件是否存在
}

applicationCache.ondownloading = function(){
   //检查到有manifest或者manifest文件
   //已更新就执行下载操作
   //即使需要缓存的文件在请求时服务器已经返回过了
}

applicationCache.onnoupdate = function(){
   //返回304表示没有更新,通知浏览器直接使用本地文件
}

applicationCache.onprogress = function(){
   //下载的时候周期性的触发,可以通过它
   //获取已经下载的文件个数
}

applicationCache.oncached = function(){
   //下载结束后触发,表示缓存成功
}

application.onupdateready = function(){
   //第二次载入,如果manifest被更新
   //在下载结束时候触发
   //不触发onchched
   alert("本地缓存正在更新中。。。");
   if(confirm("是否重新载入已更新文件")){
       applicationCache.swapCache();
       location.reload();
   }
}

applicationCache.onobsolete = function(){
   //未找到文件,返回404或者401时候触发
}

applicationCache.onerror = function(){
   //其他和离线存储有关的错误
}
登入後複製

 四、瀏覽器與伺服器的互動

      曾經有一個面試題目是這樣的:"描述在瀏覽器的網址列中輸入:www.baidu. com 後發生了什麼事?

      1、服務端回傳baidu頁面資源,瀏覽器載入html

      2、瀏覽器開始解析

      3、發現link,傳送請求載入css檔案      4、瀏覽器渲染頁

      5、發現

圖片

,傳送請求載入圖片,並重新渲染

      6、傳送請求js文件,阻塞渲染。如果js對dom進行了操作,則會進行rerender      對於支援離線儲存的頁面,瀏覽器和伺服器的互動又如何呢?

     

第一次載入頁面:

##      1-6 :同上

       7:請求頁面中需要快取的頁面和資料,就算在先前的步驟中已經請求過(這是個耗能的地方)

       8:伺服器傳回所有請求文件,瀏覽器進行本機儲存

     

再次載入頁面:

      1:發送請求

      2:使用本機儲存的離線檔案

      3:解析頁######      4:請求服務端的manifest檔案,是否有####     改變,回傳304則表示沒有改變進入步驟5,否則進入步驟6###

      5:進入第一次載入頁面的7-8

      6:使用本地存儲,不重新要求

以上是html5離線應用application cache的程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles