各種本地存儲(chǔ)對(duì)比( cookie、localStorage、sessionStorage、indexedDB、vuex)

cookie

存儲(chǔ)在cookie中的數(shù)據(jù),每次都會(huì)被瀏覽器自動(dòng)放在http請(qǐng)求中,如果這些數(shù)據(jù)并不是每個(gè)請(qǐng)求都需要發(fā)給服務(wù)端的數(shù)據(jù),瀏覽器這設(shè)置自動(dòng)處理無(wú)疑增加了網(wǎng)絡(luò)開(kāi)銷;但如果這些數(shù)據(jù)是每個(gè)請(qǐng)求都需要發(fā)給服務(wù)端的數(shù)據(jù)(比如身份認(rèn)證信息),瀏覽器這設(shè)置自動(dòng)處理就大大免去了重復(fù)添加操作。 所以對(duì)于那設(shè)置“每次請(qǐng)求都要攜帶的信息(最典型的就是身份認(rèn)證信息)”就特別適合放在cookie中,其他類型的數(shù)據(jù)就不適合了。

1.最早的本地存儲(chǔ)方式,兼容性好

2.cookie優(yōu)點(diǎn)Cookie的大小為4kb。cookie主要應(yīng)用在保存用戶身份信息。

3.當(dāng)網(wǎng)頁(yè)要發(fā)http請(qǐng)求時(shí),瀏覽器會(huì)先檢查是否有相應(yīng)的cookie,有則自動(dòng)添加在request header中的cookie字段中

4.cookie在每次請(qǐng)求中都會(huì)被發(fā)送,如果不使用 HTTPS并對(duì)其加密,其保存的信息很容易被竊取



locakStorage

1.HTML5新方法,IE8及以上瀏覽器都兼容

2.除非手動(dòng)清除,否則永久保存在瀏覽器

3.存儲(chǔ)大小一般為5MB

4.只存在于客戶端(瀏覽器)中,不參與和服務(wù)器的通信

5.相同瀏覽器的不同頁(yè)面間可以共享相同的 localStorage

6.不同瀏覽器無(wú)法共享localStorage或sessionStorage中的信息


sessionStorage

1 僅在當(dāng)前會(huì)話下有效,瀏覽器被關(guān)閉或當(dāng)前頁(yè)面被關(guān)閉的情況下清除

2 存儲(chǔ)大小一般為5MB

3 只存在于客戶端(瀏覽器)中,不參與和服務(wù)器的通信

4 api使用簡(jiǎn)單,可以直接拿來(lái)使用,也可自己封裝來(lái)對(duì)Object和Array有更好的支持

5 不同頁(yè)面或標(biāo)簽頁(yè)間無(wú)法共享sessionStorage的信息

6 不同瀏覽器無(wú)法共享localStorage或sessionStorage中的信息


indexedDB

1.indexedDB 是一個(gè)運(yùn)行在瀏覽器上的非關(guān)系型數(shù)據(jù)庫(kù),indexedDB支持多種數(shù)據(jù)格式,持久化存儲(chǔ)、支持事務(wù)、游標(biāo)、索引等數(shù)據(jù)庫(kù)操作,同時(shí)indexedDB的存儲(chǔ)空間大, 一般瀏覽器會(huì)分配50M-250M不等

2.異步 IndexedDB 操作時(shí)不會(huì)鎖死瀏覽器,用戶依然可以進(jìn)行其他操作,這與 LocalStorage 形成對(duì)比,后者的操作是同步的。異步設(shè)計(jì)是為了防止大量數(shù)據(jù)的讀寫,拖慢網(wǎng)頁(yè)的表現(xiàn)。


vuex的區(qū)別

1.區(qū)別:vuex存儲(chǔ)在內(nèi)存,localstorage(本地存儲(chǔ))則以文件的方式存儲(chǔ)在本地,永久保存(不主動(dòng)刪除,則一直存在);sessionstorage( 會(huì)話存儲(chǔ) ) ,臨時(shí)保存。localStorage和sessionStorage只能存儲(chǔ)字符串類型,對(duì)于復(fù)雜的對(duì)象可以使用ECMAScript提供的JSON對(duì)象的stringify和parse來(lái)處理

2.應(yīng)用場(chǎng)景:vuex用于組件之間的傳值,localstorage,sessionstorage則主要用于不同頁(yè)面之間的傳值。

3.永久性:當(dāng)刷新頁(yè)面(這里的刷新頁(yè)面指的是 --> F5刷新,屬于清除內(nèi)存了)時(shí)vuex存儲(chǔ)的值會(huì)丟失,sessionstorage頁(yè)面關(guān)閉后就清除掉了,localstorage不會(huì)。

注:大家可能覺(jué)得用localstorage可以代替vuex, 對(duì)于不變的數(shù)據(jù)確實(shí)可以,但是當(dāng)兩個(gè)組件共用一個(gè)數(shù)據(jù)源(對(duì)象或數(shù)組)時(shí),如果其中一個(gè)組件改變了該數(shù)據(jù)源,希望另一個(gè)組件響應(yīng)該變化時(shí),localstorage,sessionstorage無(wú)法做到,原因就是區(qū)別1。

在了解了上述的前端的緩存方式后,我們可以看看針對(duì)不對(duì)場(chǎng)景的使用選擇:

使用場(chǎng)景

標(biāo)記用戶與跟蹤用戶行為的情況,推薦使用cookie

適合長(zhǎng)期保存在本地的數(shù)據(jù)(令牌),推薦使用localStorage

敏感賬號(hào)一次性登錄,推薦使用sessionStorage

存儲(chǔ)大量數(shù)據(jù)的情況、在線文檔(富文本編輯器)保存編輯歷史的情況,推薦使用indexedDB

注意

數(shù)據(jù)與服務(wù)器之間的交互方式, cookie的數(shù)據(jù)會(huì)自動(dòng)的傳遞到服務(wù)器,服務(wù)器端也可以寫cookie到客戶端; sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容