最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端開發(fā)中最常用的5種本地存儲(chǔ)方式總結(jié)

 更新時(shí)間:2026年03月05日 08:30:00   作者:半世輪回半世尋  
在前端開發(fā)中,本地存儲(chǔ)用于在瀏覽器中持久化或臨時(shí)存儲(chǔ)數(shù)據(jù),這篇文章主要介紹了前端開發(fā)中最常用的5種本地存儲(chǔ)方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

最近項(xiàng)目里又在反復(fù)糾結(jié)本地?cái)?shù)據(jù)怎么存最合適,就想把前端日常最常碰的幾種存儲(chǔ)方式捋一遍。

為什么前端需要本地存儲(chǔ)?

簡(jiǎn)單說(shuō):提升性能、支持離線、記住用戶偏好、減少服務(wù)器壓力。

比如列表頁(yè)用戶翻了好幾頁(yè),下次進(jìn)來(lái)還想看到上次位置和篩選;PWA沒網(wǎng)也能看點(diǎn)內(nèi)容;主題暗黑模式、字體大小這些小東西,不想每次請(qǐng)求接口。

服務(wù)器傳太慢,內(nèi)存關(guān)頁(yè)就丟,本地存儲(chǔ)就成了日常標(biāo)配。

優(yōu)秀的前端本地存儲(chǔ)該有哪些特性?(參考后端思路,我覺得前端也差不多)

  • 容量夠用(別5MB就爆)
  • 持久性(關(guān)瀏覽器還能剩多少)
  • 性能(讀寫快不快,同步/異步)
  • 易用性(API友好不)
  • 跨標(biāo)簽共享(多標(biāo)簽?zāi)懿荒芡剑?/li>
  • 結(jié)構(gòu)化支持(對(duì)象、數(shù)組、Blob、大文件行不行)
  • 安全性(同源、隱私模式)

基于這些,2026年現(xiàn)在前端項(xiàng)目里,我最常用來(lái)存的其實(shí)就這5種(從簡(jiǎn)單到復(fù)雜排):

1. localStorage

最基礎(chǔ)、最常用,幾乎每個(gè)項(xiàng)目都逃不開。

怎么用(大家都知道,但還是貼代碼):

// 存
localStorage.setItem('userTheme', 'dark');

// 取
const theme = localStorage.getItem('userTheme');

// 刪
localStorage.removeItem('userTheme');

// 清空
localStorage.clear();

容量:一般5MB左右(Chrome、Safari、Firefox差不多)

持久性:永久,除非用戶手動(dòng)清瀏覽器緩存。

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):API極簡(jiǎn),同步操作,跨標(biāo)簽共享(改一個(gè),其他標(biāo)簽?zāi)芡ㄟ^storage事件監(jiān)聽到)
  • 缺點(diǎn):只能存字符串(對(duì)象要JSON.stringify),同步大點(diǎn)數(shù)據(jù)會(huì)卡主線程,隱私模式下可能被清,iOS Safari有時(shí)莫名其妙丟數(shù)據(jù)

真實(shí)場(chǎng)景:用戶設(shè)置(主題、側(cè)邊欄狀態(tài))、token應(yīng)急存、簡(jiǎn)單購(gòu)物車草稿

2. sessionStorage

跟localStorage幾乎一樣,但會(huì)話級(jí)。

代碼:把localStorage換成sessionStorage就行,用法一模一樣。

容量:5MB左右

持久性:標(biāo)簽頁(yè)關(guān)了就沒了(同窗口新tab共享)

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):臨時(shí)數(shù)據(jù)不污染長(zhǎng)期,安全性稍好(自動(dòng)銷毀)
  • 缺點(diǎn):不能跨標(biāo)簽持久共享

3. IndexedDB

大容量、結(jié)構(gòu)化數(shù)據(jù)的王者,PWA/離線必備,現(xiàn)在中大型項(xiàng)目越來(lái)越多往這兒搬。

基本用法(原生API啰嗦,實(shí)際我基本用dexie.js或idb封裝,這里先貼原生):

// 打開數(shù)據(jù)庫(kù)
const request = indexedDB.open('myAppDB', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  db.createObjectStore('todos', { keyPath: 'id', autoIncrement: true });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  // 操作...
};

// 存數(shù)據(jù)(事務(wù))
function addTodo(todo) {
  const tx = db.transaction('todos', 'readwrite');
  const store = tx.objectStore('todos');
  store.add(todo);
}

容量:很大,通常幾百M(fèi)B到GB(視磁盤空間,瀏覽器配額管理,遠(yuǎn)超5MB)

持久性:永久,但空間緊張時(shí)瀏覽器可能清(比localStorage難清)

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):異步不卡線程、支持復(fù)雜對(duì)象/Blob/文件、索引查詢、事務(wù)
  • 缺點(diǎn):原生API回調(diào)地獄,學(xué)習(xí)曲線陡(推薦封裝)

4. Cache API(配合Service Worker)

資源緩存神器,PWA性能核心。

基本用法(必須在sw.js里):

// sw.js install事件
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('my-app-v1').then(cache => {
      return cache.addAll([
        '/styles.css',
        '/app.js',
        '/images/logo.png'
      ]);
    })
  );
});

// fetch攔截
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

容量:跟IndexedDB一樣,受配額管理,很大

持久性:持久,但可被瀏覽器清理

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):專為資源設(shè)計(jì)(html/css/js/img),攔截請(qǐng)求方便,支持離線秒開
  • 缺點(diǎn):只能存Request/Response,不適合業(yè)務(wù)JSON;依賴Service Worker(https或localhost)

真實(shí)場(chǎng)景:PWA殼子、靜態(tài)資源離線、圖片懶加載備用、H5頁(yè)面緩存

5. 內(nèi)存緩存(JS對(duì)象/Map + 簡(jiǎn)單LRU)

頁(yè)面內(nèi)最快,臨時(shí)數(shù)據(jù)首選。

簡(jiǎn)單實(shí)現(xiàn)(項(xiàng)目里常用mini LRU):

class SimpleLRU {
  constructor(max = 100) {
    this.max = max;
    this.cache = new Map();
  }
  get(key) {
    if (!this.cache.has(key)) return null;
    const value = this.cache.get(key);
    this.cache.delete(key);
    this.cache.set(key, value);
    return value;
  }
  set(key, value) {
    if (this.cache.has(key)) this.cache.delete(key);
    this.cache.set(key, value);
    if (this.cache.size > this.max) {
      const oldest = this.cache.keys().next().value;
      this.cache.delete(oldest);
    }
  }
}

// 用法
const pageCache = new SimpleLRU(50);
pageCache.set('userListPage1', data);

容量:內(nèi)存大小,取決于JS堆

持久性:頁(yè)面刷新/關(guān)閉就沒了

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):納秒級(jí)、無(wú)序列化、最快
  • 缺點(diǎn):不持久、內(nèi)存泄漏風(fēng)險(xiǎn)

整體對(duì)比一圖概覽

維度localStoragesessionStorageIndexedDBCache API內(nèi)存緩存
易用性★★★★★★★★★★★★☆☆☆★★★☆☆★★★★☆
容量★★☆☆☆ (5MB)★★☆☆☆★★★★★★★★★★★☆☆☆☆
持久性★★★★★★☆☆☆☆★★★★★★★★★☆★☆☆☆☆
性能★★★☆☆★★★☆☆★★★★☆★★★★★★★★★★
結(jié)構(gòu)化支持★☆☆☆☆★☆☆☆☆★★★★★★★☆☆☆★★★★☆
適用規(guī)模小配置臨時(shí)會(huì)話中大型離線資源/PWA頁(yè)面內(nèi)臨時(shí)

最后選型建議(我自己的經(jīng)驗(yàn))

  • 簡(jiǎn)單配置、偏好 → localStorage
  • 臨時(shí)表單/狀態(tài) → sessionStorage
  • 大量業(yè)務(wù)數(shù)據(jù)、離線 → IndexedDB(強(qiáng)烈推dexie.js)
  • PWA/靜態(tài)資源 → Cache API + Service Worker
  • 頁(yè)面內(nèi)高速?gòu)?fù)用 → 內(nèi)存LRU

項(xiàng)目里我現(xiàn)在基本這么分層:小配置local,臨時(shí)session,大數(shù)據(jù)IndexedDB,資源Cache,內(nèi)存加速。

覆蓋了95%的場(chǎng)景,不會(huì)再糾結(jié)了。

總結(jié)

到此這篇關(guān)于前端開發(fā)中最常用的5種本地存儲(chǔ)方式的文章就介紹到這了,更多相關(guān)前端本地存儲(chǔ)方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript canvas API內(nèi)容整理

    javascript canvas API內(nèi)容整理

    在本篇文章里小編給大家分享的是關(guān)于javascript canvas API內(nèi)容整理,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2020-02-02
  • js最全的數(shù)組的降維5種辦法(小結(jié))

    js最全的數(shù)組的降維5種辦法(小結(jié))

    這篇文章主要介紹了js最全的數(shù)組的降維5種辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • JS實(shí)現(xiàn)數(shù)組去重方法總結(jié)(六種方法)

    JS實(shí)現(xiàn)數(shù)組去重方法總結(jié)(六種方法)

    這篇文章給大家總結(jié)下JS實(shí)現(xiàn)數(shù)組去重方法(六種方法),面試中也經(jīng)常會(huì)遇到這個(gè)問題。文中給大家引申的還有合并數(shù)組并去重的方法,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2017-07-07
  • 微信小程序中做用戶登錄與登錄態(tài)維護(hù)的實(shí)現(xiàn)詳解

    微信小程序中做用戶登錄與登錄態(tài)維護(hù)的實(shí)現(xiàn)詳解

    微信小程序的運(yùn)行環(huán)境不是在瀏覽器下運(yùn)行的。所以不能以cookie來(lái)維護(hù)登錄態(tài)。下面這篇文章主要給大家介紹了微信小程序中如何做用戶登錄與登錄態(tài)維護(hù)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考學(xué)習(xí)。
    2017-05-05
  • Javascript 修改String 對(duì)象 增加去除空格功能(示例代碼)

    Javascript 修改String 對(duì)象 增加去除空格功能(示例代碼)

    這篇文章主要介紹了Javascript 修改String 對(duì)象 增加去除空格功能(示例代碼)。需要的朋友可以過來(lái)參考下,希望對(duì)大家有所幫助
    2013-11-11
  • js對(duì)象數(shù)組按屬性快速排序

    js對(duì)象數(shù)組按屬性快速排序

    前一篇《關(guān)于selector性能比賽》中提到,目測(cè)覺得在$("div,p,a")這樣有逗號(hào)時(shí),sizzle耗時(shí)異常(600多個(gè)元素,花了200ms),說(shuō)是它可能沒有優(yōu)化ie下的排序。
    2011-01-01
  • JavaScript拆分字符串時(shí)產(chǎn)生空字符的解決方案

    JavaScript拆分字符串時(shí)產(chǎn)生空字符的解決方案

    使用JavaScript的split方法拆分字符串時(shí)出現(xiàn)一些空字符串"",尤其是當(dāng)使用正則表達(dá)式作為分隔符的時(shí)候。那么,產(chǎn)生這些空字符串的原因是什么?又該如何來(lái)處理呢,這就是今天我們要探討的問題
    2014-09-09
  • JS實(shí)現(xiàn)數(shù)組扁平化的方法分享

    JS實(shí)現(xiàn)數(shù)組扁平化的方法分享

    數(shù)組扁平化指的是:將一個(gè)多層嵌套的數(shù)組,處理成只有一層的數(shù)組。本文主要和大家介紹了幾個(gè)常用的JS數(shù)組扁平化方法,希望對(duì)大家有所幫助
    2023-04-04
  • Bootstrap?table列上下移動(dòng)效果

    Bootstrap?table列上下移動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Bootstrap?table列上下移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • JavaScript設(shè)計(jì)模式之緩存代理模式原理與簡(jiǎn)單用法示例

    JavaScript設(shè)計(jì)模式之緩存代理模式原理與簡(jiǎn)單用法示例

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之緩存代理模式原理與簡(jiǎn)單用法,結(jié)合實(shí)例形式簡(jiǎn)要分析了javascript緩存代理模式的基本原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-08-08

最新評(píng)論

科尔| 宜宾市| 灵石县| 阿鲁科尔沁旗| 岳普湖县| 乌鲁木齐县| 韩城市| 长白| 巩留县| 禹州市| 石嘴山市| 日照市| 贵阳市| 兴业县| 乳源| 祁门县| 韶山市| 三穗县| 宣武区| 西乌珠穆沁旗| 宜兴市| 武陟县| 灵川县| 抚顺县| 西和县| 石柱| 汉寿县| 信宜市| 惠东县| 平山县| 孝义市| 彭水| 西林县| 红桥区| 棋牌| 太谷县| 北海市| 宣化县| 禹城市| 池州市| 和平县|