H5存儲2--Html5的幾種存儲形式詳述

存儲形式:

? ? 一、本地存儲(localstorage&sessionstorage)

? ? 二、離線存儲(application cache)

? ? 三、indexedDB和Web SQL


詳解:

一、本地存儲:

?--localstorage&sessionstorage

1.存儲形式

????--key,value

2.過期

? ? --永久存儲,永不失效,除非手動刪除(sessionStorage關閉瀏覽器就沒了)

3.大小

? ? --官方給出的文檔是,每個域名5M


使用方法

????--localstorage API介紹

????????--getItem (取)

????????--setItem (記錄)

????????--removeItem (移除)

????????--key? (參數是下標,拿某下標上的key值)

????????--clear (全部刪除)

總:只要是可以轉化成字符串的,都可以存儲在localsrorage


二、離線存儲


1.數組:需要序列化為字符串存入

2.json數據:parse.stringify成字符串可以存入

3.圖片:Canvas的toDataURL(image/*)之后變成base64~~一堆編碼字符串

4.腳本:ajax-response 拉回來

5.樣式文件:同上

使用限制:

子域名之間不能共享存儲數據,這是可以使用h5的postmessage來發送信息,超出存儲大小之后如何存儲(LRU,FIFO)


案例1:存儲圖片到localstorage

場景:圖片基本不更改,在用戶第二次訪問的時候希望用戶馬上看到,就可以把圖片存到localstorage里面,如果圖片的base64(canvas生成)特別大的話,會比較費localstorage的資源。canvas有一個安全策略,如果圖片和請求的域名不在同一個域下,會報一個安全的策略,這時候需要給圖片服務器加一個Access-Control-Allow-Origin,從而保證圖片可以跨域.

使用本地存儲注意事項:

????1.使用前要判斷瀏覽器是否支持(在實際情況中,有一些移動端的瀏覽器,比如ios,如果打開了無痕模式,這個時候沒法使用localstorage,還有一些瀏覽器,你可以訪問到localsttorage的對象,但是存儲的時候報錯,所以網上很多給出判斷瀏覽器是否支持用的是window.localstorage,這種方法其實不是不太健全的,建議大家在判斷是否支持的時候可以先去set一次,然后把這個set異常捕獲,如果捕獲到異常的話,說明瀏覽器不支持。)

????2.寫數據的時候,需要異常處理,避免超出容量拋錯(它本身只有5M存儲空間,如果不去做這樣的異常處理,超出容量會報異常)

????3.避免把敏感信息存入localstorage

????4.key的唯一性(如果重復set的話會把新的值覆蓋到之前的)

使用場景:

????1.利用本地數據,減少網絡傳輸(腳本,樣式文件本地化,這樣下次訪問的時候,更流暢)

????2.弱網絡環境下,高延遲,低寬帶,盡量把數據本地化



varsrc='e.png'

functionset(key){

varimg=document.createElement('img')

//當圖片加載完成的時候觸發回調函數

img.addEventListener('load',function(){

varimgCanvas=document.createElement('canvas')

imgContext=imgCanvas.getContext('2d')

//確保canvas元素的大小和圖片尺寸一致

imgCanvas.width=this.width

imgCanvas.height=this.height

//渲染圖片到canvas中

imgContext.drawImage(this,0,0,this.width,this.height)

//用data url形式取出imgAsDataURL就是一個base64字符串

varimgAsDataURL=imgCanvas.toDataURL('image/png')

//保存到本地存儲中,做一下錯誤處理,以免有的瀏覽器不支持

try{

localStorage.setItem(key,imgAsDataURL)

}

catch(e){

console.log('storage failed'+e)

}

},false)

img.src=src

}

functionget(key){//從本地緩存獲取圖片并且渲染

varsrcStr=localStorage.getItem(key)

varimgObj=document.createElement('img')

imgObj.src=srcStr

document.body.appendChild(imgObj)

}

set('imgdata')

get('imgdata')

三、indexedDB和Web SQL

?????indexedDB database:Web SQL微軟已經不支持了,雖然indexedDB支持率比較弱?,但是也得學習。。它是一種能在瀏覽器中持久地存儲結構化數據的數據庫,并且為web應用提供了豐富的查詢能力

下面來詳細學習一下indexedDB:

算了,好像用的比較少,時間緊迫,不學了。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容