站長資訊網
        最全最豐富的資訊網站

        html5應用緩存與Web Workers的圖文詳解

        在html5當中引入了應用程序緩存,這意味著web應用可以進行緩存,并且可以在沒有網絡連接的時候進行訪問。

        應用緩存的優(yōu)勢

        • 離線瀏覽,用戶可以在離線的時候瀏覽已經加載并且緩存好的數(shù)據(jù)

        • 加快加載速度。

        • 減少服務器負載。

        實現(xiàn)用緩存

        如果啟用應用程序緩存,需要在<html>標簽當中包含manifest屬性,manifest文件的建議擴展名是:”.appcache”

        manifest文件

        manifest文件為我們提供了三種緩存的方式:
        version n.n :version表示當前manifest的版本,當version發(fā)生變化的時候,此時當用戶再次加載的時候,會將CACHE標簽下列出的所有文件重新下載一次。
        – CACHE MANIFEST:在此標題下列出的文件,將在首次下載后進行緩存。
        – NETWORK: 在此標題下列出的文件需要與服務器的鏈接,且不會被緩存。
        – FALLBACK: 在此標題下列出的文件,規(guī)定訪問緩存失敗后,備用訪問的資源,第一個是訪問源,第二個是替換文件*.html /offline.html,例如404頁面。

        緩存的應用

        這里我創(chuàng)建一個web工程,并且新建一個html文件:
        index.html

        <!DOCTYPE html><html manifest="index.appcache">    <head>      <title>index.html</title>      <link rel="stylesheet" type="text/css" href="./css/style.css">    </head>     <body>      <h1>This is my HTML page</h1>    </body></html>

        style.css

        @CHARSET "UTF-8";h1 {    color: aqua;}

        可以看到這里,我的頁面很簡單,并且引用了一個style.css樣式文件。并且在<html>標簽當中,指定了緩存文件index.appcache.
        index.appcache 內容如下:

        CACHE MANIFEST#version 1.0CACHE:index.htmlcss/style.css

        可以看到,這里我們使用CACHE類型的緩存,表示需要緩存index.html和css/style.css這兩個文件。此時打開服務器,瀏覽該網頁,在關閉服務器,會發(fā)現(xiàn)該網頁同樣可以訪問,此時按下F12,打開開發(fā)者選項,會發(fā)現(xiàn)有如下緩存:
        html5應用緩存與Web Workers的圖文詳解

        同時也可以使用NETWORK類型的緩存,來表示那些文件是需要聯(lián)網下載的,這里我將css/style.css文件寫入到NETWORK類型的緩存當中。

        CACHE MANIFEST#version 1.0CACHE:index.htmlNETWORK:css/style.css

        首先需要手動清除一下之前緩存的記錄。然后打開服務器,瀏覽http://localhost:8080/html5cache/index.html,此時顯示效果如下:
        html5應用緩存與Web Workers的圖文詳解
        可以看到此時只是緩存了html頁面,并沒有緩存css/style.css文件,此時關閉服務器,再次刷新該頁面,效果如下:
        html5應用緩存與Web Workers的圖文詳解
        可以看到此時,就只是加載了html頁面,并么有加載css文件,所以h1標簽的字體是默認的。

        更新緩存

        如果需要更新緩存,比如這里我更改了html中的文字,此時再次訪問localhost:8080/html5cache/index.html 的時候,是不會加載最新的頁面文字的,這是因為瀏覽器默認會到緩存中查找,如果緩存中有,則直接從緩存中取出,因此我們需要更新緩存文件”index.appcache”中的version即可,如下:

        CACHE MANIFEST#version 1.1CACHE:css/style.cssindex.htmlNETWORK:FALLBACK:

        這里,我將version更改了1.1,此時再次訪問該頁面的時候, 是會到服務其下載最新的頁面,說到這里,緩存的缺點就出來了,就是哪怕我一個頁面中只更新一行文字,但是當我更改了”index.appcache”文件中的version值之后,就會重新將CACHE中定義的所有內容,重新下載一次。

        使用js自動更新緩存

        另外,我們還可以使用applicationcache對象來自動更新緩存。如下:

        <script type="text/javascript">           //添加頁面加載函數(shù)          window.addEventListener('load', function(e) {              //為applicationCache對象添加updateready事件             window.applicationCache.addEventListener('updateready', function(e) {              //表示manifest中列舉的文件已經重新下載并更新成功              if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {                            //使用swapCache()方法更新到應用程序中                window.applicationCache.swapCache();                              if (confirm('A new version of this site is available. Load it?')) {                                //重新加載當前頁面                  window.location.reload();                  }                } else {                //manifest文件沒有變化                  console.log("manifest 沒有改變");              }              }, false);            }, false);    </script>

        applicationcache是window對象的直接子對象,該對象的事件列表如下:
        html5應用緩存與Web Workers的圖文詳解
        status 返回緩存的狀態(tài)

        可選值 匹配常量 描述
        0 appCache.UNCACHED 未緩存
        1 appCache.IDLE 閑置
        2 appCache.CHECKING 檢查中
        3 appCache.DOWNLOADING 下載中
        4 appCache.UPDATEREADY 已更新
        5 appCache.OBSOLETE 失效

        方法

        方法名 匹配常量
        update() 發(fā)起應用程序緩存下載進程
        abort() 取消正在進行的緩存下載
        swapcache() 切換成本地最新的緩存環(huán)境

        web workers

        web workers是運行在后臺的腳本,獨立于其他的腳本,不會影響頁面的性能。類似于android開發(fā)中的handler。將繁重耗時的計算放到web worker中來實現(xiàn),然后將處理的結果返回給主UI線程來顯示。

        web workers方法

        • postMessage() :用于向html頁面回傳一段消息。

        • terminate() :終止web workers,并且釋放計算機資源。

        web workers簡單實現(xiàn)

        下面使用web workers簡單實現(xiàn)一數(shù)字更新的demo:
        新建一個web工程,創(chuàng)建index.html

        <!DOCTYPE html><html><head lang="en">      <meta charset="UTF-8">      <title></title>      <script src="index.js"></script></head><body>      <p id="nump">0</p></body></html>

        這里在index.html文件當中引入了index.js文件。
        index.js

        var nump;  window.onload = function(){      nump = document.getElementById("nump");    var work = new Worker("count.js");      work.onmessage = function(e) {          //alert(e.data);          nump.innerHTML = e.data;      };  };

        可以看到,這里講更新數(shù)據(jù)的具體操作,使用Worker來更新,在worker當中加載了count.js文件來做一些耗時,復雜的計算。然后使用worker的onmessage回調方法,將count.js返回的結果重新顯示給nump。
        count.js

        var countNum = 0;function count(){      postMessage(countNum);//通過postMessage方法將計算結果回傳給調用者      countNum++;      setTimeout(count,1000);  }  count();

        count.js文件比較簡單,每隔一秒更新countNum的值,然后回傳給調用者,也就是這里的index.js

        此時運行效果如下:
        html5應用緩存與Web Workers的圖文詳解

        下面添加一個開始停止的控制按鈕:

         <button id="start">start</button>   <button id="stop">stop</button>

        index.js

        var nump;var work;  window.onload = function(){      nump = document.getElementById("nump");          var start = document.getElementById("start");          var stop = document.getElementById("stop");      start.onclick = startWorker;      stop.onclick = stopWorker;    };function startWorker() {      if (work) { //如果work存在,則直接返回          return;      } else {          work = new Worker("count.js");          work.onmessage = function(e) {              nump.innerHTML = e.data;          };      }  }function stopWorker() {      if (work) {//如果worker存在,則終止并且為其重新賦值          work.terminate();          work = null;      }  }

        此時運行效果如下:
        html5應用緩存與Web Workers的圖文詳解

        另外我們還可以通過navaigator對象的onLine屬性來判斷當前瀏覽器是否在線,該屬性屬于只讀屬性,會返回boolean類型的值。

        if(window.navigator.onLine) {    //在線} else {    //離線}

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 999在线视频精品免费播放观看 | 亚洲日韩国产AV无码无码精品 | 精品国产免费一区二区三区香蕉| 人妻少妇看A偷人无码精品视频 | 91精品在线播放| 亚洲精品成人网久久久久久| 国产精品毛片a∨一区二区三区| 国产精品久久国产精麻豆99网站| 久久婷婷国产综合精品| 中文字幕精品一区二区精品| 久久亚洲AV永久无码精品| 国产精品久久久久久久久久免费| 久久99精品国产一区二区三区| 潮喷大喷水系列无码久久精品| 无码日韩精品一区二区免费| 无码乱码观看精品久久| 精品偷自拍另类在线观看丰满白嫩大屁股ass| 青青青国产依人精品视频| 久久精品无码一区二区三区| 99re久久精品国产首页2020| 国产精品免费高清在线观看| 久久精品国产亚洲av麻豆小说| 亚洲AV日韩精品久久久久久| 午夜天堂精品久久久久| 亚洲精品国产精品乱码在线观看 | 亚洲一区精品伊人久久伊人 | 久久66热人妻偷产精品9| 日韩精品区一区二区三VR| 亚洲欧洲国产精品香蕉网| 中文字幕精品一区 | 一本久久a久久精品综合香蕉| 午夜三级国产精品理论三级| 午夜在线视频91精品| 亚洲日韩国产精品第一页一区| 无码日韩精品一区二区免费| 久久九九久精品国产免费直播| 久久青青草原精品国产 | 国产亚洲精品va在线| 久久精品嫩草影院| 99久久国产综合精品五月天喷水| 国产99久久九九精品无码|