【js】前端持久化存儲 localStorage收恢、sessionStorage武学、Cookie、indexedDB的區(qū)別及用法

一伦意、cookie

生命期為只在設置的cookie過期時間之前一直有效火窒,即使窗口或瀏覽器關閉。 存放數(shù)據(jù)大小為4K左右 驮肉。有個數(shù)限制(各瀏覽器不同)熏矿,一般不能超過20個。與服務器端通信:每次都會攜帶在HTTP頭中离钝,如果使用cookie保存過多數(shù)據(jù)會帶來性能問題票编。
cookie的優(yōu)點:具有極高的擴展性和可用性
1.通過良好的編程,控制保存在cookie中的session對象的大小卵渴。
2.通過加密和安全傳輸技術慧域,減少cookie被破解的可能性。
3.只有在cookie中存放不敏感的數(shù)據(jù)浪读,即使被盜取也不會有很大的損失昔榴。
4.控制cookie的生命期,使之不會永遠有效碘橘。這樣的話偷盜者很可能拿到的就 是一個過期的cookie互订。
cookie的缺點:
1.cookie的長度和數(shù)量的限制。每個domain最多只能有20條cookie痘拆,每個cookie長度不能超過4KB仰禽。否則會被截掉。
2.安全性問題纺蛆。如果cookie被人攔掉了吐葵,那個人就可以獲取到所有session信息。加密的話也不起什么作用桥氏。
3.有些狀態(tài)不可能保存在客戶端折联。例如,為了防止重復提交表單识颊,我們需要在服務端保存一個計數(shù)器诚镰。若吧計數(shù)器保存在客戶端,則起不到什么作用祥款。

二清笨、webstorage是本地存儲,存儲在客戶端刃跛,包括localStorage和sessionStorage抠艾。

1.localStorage

localStorage生命周期是永久,這意味著除非用戶顯示在瀏覽器提供的UI上清除localStorage信息桨昙,否則這些信息將永遠存在检号。存放數(shù)據(jù)大小為一般為5MB,而且它僅在客戶端(即瀏覽器)中保存腌歉,不參與和服務器的通信。

2.sessionStorage

為每一個數(shù)據(jù)源維持一個存儲區(qū)域齐苛,在瀏覽器打開期間存在翘盖,包括頁面重新加載

api

sessionStorage 和 localStorage 的用法基本一致,引用類型的值要轉換成JSON

保存數(shù)據(jù)到本地

const student= {
        name: 'Lee',
        age: 20,
        id: '001'
    };
    sessionStorage.setItem('token', JSON.stringify(student));
    localStorage.setItem('token', JSON.stringify(student));

從本地存儲獲取數(shù)據(jù)

var data1 = JSON.parse(sessionStorage.getItem('token'));
var data2 = JSON.parse(localStorage.getItem('token'));

本地存儲中刪除某個保存的數(shù)據(jù)

sessionStorage.removeItem('token');
localStorage.removeItem('token');

刪除所有保存的數(shù)據(jù)

sessionStorage.clear();
localStorage.clear();

作用域不同

不同瀏覽器無法共享localStorage或sessionStorage中的信息凹蜂。相同瀏覽器的不同頁面間可以共享相同的 localStorage(頁面屬于相同域名和端口)馍驯,但是不同頁面或標簽頁間無法共享sessionStorage的信息。這里需要注意的是玛痊,頁面及標 簽頁僅指頂級窗口汰瘫,如果一個標簽頁包含多個iframe標簽且他們屬于同源頁面,那么他們之間是可以共享sessionStorage的擂煞。
localStorage混弥、sessionStorage、Cookie共同點:都是保存在瀏覽器端对省,且同源的剑逃。

三、再來說說indexedDB

在使用一個技術之前官辽,先搞清楚它是什么蛹磺,這對你的理解很重要,從DB就可以看出同仆,它肯定是一個數(shù)據(jù)庫萤捆,而說到數(shù)據(jù)庫,有兩種不同類型的數(shù)據(jù)庫俗批,就是關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫俗或,關系型數(shù)據(jù)庫如Mysql、Oracle等將數(shù)據(jù)存儲在表中岁忘,而非關系型數(shù)據(jù)庫如Redis辛慰、MongoDB等將數(shù)據(jù)集作為個體對象存儲。indexedDB就是一個非關系型數(shù)據(jù)庫干像,它不需要你去寫一些特定的sql語句來對數(shù)據(jù)庫進行操作帅腌,因為它是nosql的,數(shù)據(jù)形式使用的是json麻汰,
意義
也許熟悉前端存儲的會說速客,不是有了LocalStorage和Cookies嗎?為什么還要推出indexedDB呢五鲫?其實對于在瀏覽器里存儲數(shù)據(jù)溺职,你可以使用cookies或local storage,但它們都是比較簡單的技術,而IndexedDB提供了類似數(shù)據(jù)庫風格的數(shù)據(jù)存儲和使用方式浪耘。
首先說說Cookies乱灵,英文直接翻譯過來就是小甜點,聽起來很好吃七冲,實際上并不是痛倚,每次HTTP接受和發(fā)送都會傳遞Cookies數(shù)據(jù),它會占用額外的流量癞埠。例如状原,如果你有一個10KB的Cookies數(shù)據(jù)聋呢,發(fā)送10次請求苗踪,那么,總計就會有100KB的數(shù)據(jù)在網(wǎng)絡上傳輸削锰。Cookies只能是字符串通铲。瀏覽器里存儲Cookies的空間有限,很多用戶禁止瀏覽器使用Cookies器贩。所以颅夺,Cookies只能用來存儲小量的非關鍵的數(shù)據(jù)。
其次說說LocalStorage蛹稍,LocalStorage是用token-value鍵值模式存儲數(shù)據(jù)吧黄,但跟IndexedDB不一樣的是,它的數(shù)據(jù)并不是按對象形式存儲唆姐。它存儲的數(shù)據(jù)都是字符串形式拗慨。如果你想讓LocalStorage存儲對象,你需要借助JSON.stringify()能將對象變成字符串形式奉芦,再用JSON.parse()將字符串還原成對象赵抢。但如果要存儲大量的復雜的數(shù)據(jù),這并不是一種很好的方案声功。畢竟烦却,localstorage就是專門為小數(shù)量數(shù)據(jù)設計的,所以它的api設計為同步的先巴。而IndexedDB很適合存儲大量數(shù)據(jù)其爵,它的API是異步調用的。IndexedDB使用索引存儲數(shù)據(jù)伸蚯,各種數(shù)據(jù)庫操作放在事務中執(zhí)行醋闭。IndexedDB甚至還支持簡單的數(shù)據(jù)類型。IndexedDB比localstorage強大得多朝卒,但它的API也相對復雜证逻。對于簡單的數(shù)據(jù),你應該繼續(xù)使用localstorage,但當你希望存儲大量數(shù)據(jù)時囚企,IndexedDB會明顯的更適合丈咐,IndexedDB能提供你更為復雜的查詢數(shù)據(jù)的方式。

indexedDB的特性

1.對象倉庫
2.事務性
3.基于請求
4.異步
使用
打開數(shù)據(jù)庫并且開始一個事務龙宏。
創(chuàng)建一個 object store棵逊。
構建一個請求來執(zhí)行一些數(shù)據(jù)庫操作,像增加或提取數(shù)據(jù)等银酗。
通過監(jiān)聽正確類型的 DOM 事件以等待操作完成辆影。
在操作結果上進行一些操作(可以在 request 對象中找到)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黍特,隨后出現(xiàn)的幾起案子蛙讥,更是在濱河造成了極大的恐慌,老刑警劉巖灭衷,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件次慢,死亡現(xiàn)場離奇詭異,居然都是意外死亡翔曲,警方通過查閱死者的電腦和手機迫像,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞳遍,“玉大人闻妓,你說我怎么就攤上這事÷有担” “怎么了由缆?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長份蝴。 經常有香客問我犁功,道長,這世上最難降的妖魔是什么婚夫? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任浸卦,我火速辦了婚禮,結果婚禮上案糙,老公的妹妹穿的比我還像新娘限嫌。我一直安慰自己,他們只是感情好时捌,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布怒医。 她就那樣靜靜地躺著,像睡著了一般奢讨。 火紅的嫁衣襯著肌膚如雪稚叹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音扒袖,去河邊找鬼塞茅。 笑死,一個胖子當著我的面吹牛季率,可吹牛的內容都是我干的野瘦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼飒泻,長吁一口氣:“原來是場噩夢啊……” “哼鞭光!你這毒婦竟也來了?” 一聲冷哼從身側響起泞遗,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惰许,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刹孔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啡省,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡娜睛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年髓霞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦戒。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡方库,死狀恐怖,靈堂內的尸體忽然破棺而出障斋,到底是詐尸還是另有隱情纵潦,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布垃环,位于F島的核電站邀层,受9級特大地震影響,放射性物質發(fā)生泄漏遂庄。R本人自食惡果不足惜寥院,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涛目。 院中可真熱鬧秸谢,春花似錦、人聲如沸霹肝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沫换。三九已至臭蚁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垮兑。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工炭晒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甥角。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓网严,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗤无。 傳聞我的和親對象是個殘疾皇子震束,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容