Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
、什么是應用程序緩存:
HTML5引入了應用程序緩存,這意味著web應用可進行緩存,并可在沒有因特網
連接時進行訪問
2、應用緩存的優勢:
1): 離線瀏覽-用戶可在應用離線時使用它們
2):速度-已緩存資源加載得更快
3):減少服務器負載-瀏覽器將只從服務器下載更新過或更改過的資源
3、實現緩存:
如需啟用應用程序緩存,請在文檔的<html>標簽中包含manifest屬性
manifest文件的建議的文件擴展名是:’.appcache'"
4、Manifest 文件:
1): CACHE MANIFEST-在此標題下列出的文件將在首次下載后進行緩存
2): NETWORK -在此標題下列出的文件需要與服務器的連接, 且不會被緩存
3): FALLBACK -在此標題下列出的文件規定當頁面無法訪問時的回退頁面(比如
404頁面)
具體使用:1、在html頁面的html標簽里面添加.appcache 的文件
2、創建對應的.appcache文件
3、在緩存文件里面寫上 CACHE MANIFEST 注意是大寫哦
接著寫上CACHE:../db.html
db.js
db.html頁面里面:<html manifest="js/db.appcache">db.appcache文件創建在js文件夾里面,創建的時候,選擇創建文件即可
頁面加上緩存后,本地打開服務器html5頁面速度會變快,或者服務器沒有連接上,本地也可以顯示頁面數據
ocalStorage(本地存儲),可以長期存儲數據,沒有時間限制,一天,一年,兩年甚至更長,數據都可以使用。sessionStorage(會話存儲),只有在瀏覽器被關閉之前使用,創建另一個頁面時同意可以使用,關閉瀏覽器之后數據就會消失。
HTML5 的本地存儲 API 中的 localStorage 與 sessionStorage 在使用方法上是相同的,區別在于 sessionStorage 在關閉頁面后即被清空,而 localStorage 則會一直保存。我們這里以 localStorage 為例,簡要介紹下 HTML5 的本地存儲,并針對如遍歷等常見問題作一些示例說明。 localStorage 是 HTML5 本地存儲的 API,使用鍵值對的方式進行存取數據,存取的數據只能是字符串。不同瀏覽器對該 API 支持情況有所差異,如使用方法、最大存儲空間等。
下面我們用sessionStorage寫一個本地緩存類
先建一個緩存對象
2.這個對象里有以下方法
整體代碼
3.使用
var ArtStorage = new ArtStorage();
//設置
ArtStorage.set(key,value,0)//鍵,值,緩存時間(單位秒,0表示不超時)
獲取
alert(ArtStorage.get(key));
SDN移動將持續為您優選移動開發的精華內容,共同探討移動開發的技術熱點話題,涵蓋移動應用、開發工具、移動游戲及引擎、智能硬件、物聯網等方方面面。如果您想投稿、尋求《近匠》報道,或給文章挑錯,歡迎發送郵件至tangxy#csdn.net(請把#改成@)。
HTML5是新一代的HTML標準,加入很多新的特性。離線存儲(也可稱為緩存機制)是其中一個非常重要的特性。HTML5引入的離線存儲,這意味著Web應用可進行緩存,并可在沒有因特網連接時進行訪問。
HTML5應用程序緩存為應用帶來三個優勢:
根據標準,到目前為止,HTML5一共有6種緩存機制,有些是之前已有,有些是HTML5才新加入的。
下面我們首先分析各種緩存機制的原理、用法及特點;然后針對Android移動端Web性能加載優化的需求,看如何適當利用緩存機制來提高Web的加載性能。
瀏覽器緩存機制是指通過HTTP協議頭里的Cache-Control(或Expires)和Last-Modified(或Etag)等字段來控制文件緩存的機制。這應該是Web中最早的緩存機制了,是在HTTP協議中實現的,有點不同于Dom Storage、AppCache等緩存機制,但本質上是一樣的。可以理解為,一個是協議層實現的,一個是應用層實現的。
Cache-Control用于控制文件在本地緩存有效時長。最常見的,比如服務器回包:Cache-Control:max-age=600表示文件在本地應該緩存,且有效時長是600秒(從發出請求算起)。在接下來600秒內,如果有請求這個資源,瀏覽器不會發出HTTP請求,而是直接使用本地緩存的文件。
Last-Modified是標識文件在服務器上的最新更新時間。下次請求時,如果文件緩存過期,瀏覽器通過If-Modified-Since字段帶上這個時間,發送給服務器,由服務器比較時間戳來判斷文件是否有修改。如果沒有修改,服務器返回304告訴瀏覽器繼續使用緩存;如果有修改,則返回200,同時返回最新的文件。
Cache-Control通常與Last-Modified一起使用。一個用于控制緩存有效時間,一個在緩存失效后,向服務查詢是否有更新。
Cache-Control還有一個同功能的字段:Expires。Expires的值一個絕對的時間點,如:Expires: Thu, 10 Nov 2015 08:45:11 GMT,表示在這個時間點之前,緩存都是有效的。
Expires是HTTP1.0標準中的字段,Cache-Control是HTTP1.1標準中新加的字段,功能一樣,都是控制緩存的有效時間。當這兩個字段同時出現時,Cache-Control是高優化級的。
Etag也是和Last-Modified一樣,對文件進行標識的字段。不同的是,Etag的取值是一個對文件進行標識的特征字串。在向服務器查詢文件是否有更新時,瀏覽器通過If-None-Match字段把特征字串發送給服務器,由服務器和文件最新特征字串進行匹配,來判斷文件是否有更新。沒有更新回包304,有更新回包200。Etag和Last-Modified可根據需求使用一個或兩個同時使用。兩個同時使用時,只要滿足基中一個條件,就認為文件沒有更新。
另外有兩種特殊的情況:
下面是通過Google Chrome瀏覽器(用其他瀏覽器+抓包工具也可以)自帶的開發者工具,對一個資源文件不同情況請求與回包的截圖。
首次請求:200
緩存有效期內請求:200(from cache)
緩存過期后請求:304(Not Modified)
一般瀏覽器會將緩存記錄及緩存文件存在本地Cache文件夾中。Android下App如果使用Webview,緩存的文件記錄及文件內容會存在當前App的Data目錄中。
分析:Cache-Control和Last-Modified一般用在Web的靜態資源文件上,如JS、CSS 和一些圖像文件。通過設置資源文件緩存屬性,對提高資源文件加載速度,節省流量很有意義,特別是移動網絡環境。但問題是:緩存有效時長該如何設置?如果設置太短,就起不到緩存的使用;如果設置的太長,在資源文件有更新時,瀏覽器如果有緩存,則不能及時取到最新的文件。
Last-Modified需要向服務器發起查詢請求,才能知道資源文件有沒有更新。雖然服務器可能返回304告訴沒有更新,但也還有一個請求的過程。對于移動網絡,這個請求可能是比較耗時的。有一種說法叫“消滅304”,指的就是優化掉304的請求。
抓包發現,帶if-Modified-Since字段的請求,如果服務器回包304,回包帶有Cache-Control:max-age或Expires字段,文件的緩存有效時間會更新,就是文件的緩存會重新有效。304回包后如果再請求,則又直接使用緩存文件了,不再向服務器查詢文件是否更新了,除非新的緩存時間再次過期。
另外,Cache-Control與Last-Modified是瀏覽器內核的機制,一般都是標準的實現,不能更改或設置。以QQ瀏覽器的X5為例,Cache-Control與Last-Modified緩存不能禁用。緩存容量是12MB,不分Host,過期的緩存會最先被清除。如果都沒過期,應該優先清最早的緩存或最快到期的或文件大小最大的;過期緩存也有可能還是有效的,清除緩存會導致資源文件的重新拉取。
還有,瀏覽器,如X5,在使用緩存文件時,是沒有對緩存文件內容進行校驗的,這樣緩存文件內容被修改的可能。
分析發現,瀏覽器的緩存機制還不是非常完美的緩存機制。完美的緩存機制應該是這樣的:
在實際應用中,為了解決Cache-Control緩存時長不好設置的問題,以及為了“消滅304”,Web前端采用的方式是:
通過這種方式,實現了:緩存文件沒有更新,則使用緩存;緩存文件有更新,則第一時間使用最新文件的目的。即上面說的第1、2條。第3、4條由于瀏覽器內部機制,目前還無法滿足。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。