JavaScript 數據存儲全攻略:從 Cookie 到 IndexedDB

1. Cookie:傳統的輕量級存儲

Cookie 是最早的客戶端存儲解決方案之一,最初設計用于服務器和客戶端之間的狀態保持。

基本用法

javascript

復制

下載

// 設置cookie
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";// 讀取cookie
console.log(document.cookie); // 輸出所有cookie// 刪除cookie(通過設置過期時間為過去)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

特點

  • 存儲大小限制:約4KB

  • 隨每個HTTP請求自動發送到服務器

  • 可以設置過期時間

  • 同源策略限制

適用場景

  • 用戶身份驗證令牌

  • 簡單的用戶偏好設置

  • 需要服務器訪問的小數據

2. Web Storage:簡單的鍵值對存儲

Web Storage 提供了兩種機制:localStorage?和?sessionStorage

localStorage

javascript

復制

下載

// 存儲數據
localStorage.setItem('theme', 'dark');// 讀取數據
const theme = localStorage.getItem('theme'); // 'dark'// 刪除數據
localStorage.removeItem('theme');// 清空所有數據
localStorage.clear();

sessionStorage

javascript

復制

下載

// 用法與localStorage相同,但只在當前會話有效
sessionStorage.setItem('tempData', 'some value');

特點

  • 存儲大小:通常5-10MB(各瀏覽器不同)

  • 僅限客戶端使用,不會自動發送到服務器

  • localStorage 持久存儲,sessionStorage 會話級存儲

  • 同步操作,可能阻塞主線程

適用場景

  • 用戶偏好設置(主題、語言等)

  • 表單數據臨時保存

  • 不需要復雜查詢的簡單數據

3. IndexedDB:強大的客戶端數據庫

IndexedDB 是一個完整的客戶端 NoSQL 數據庫系統,適合存儲大量結構化數據。

基本用法

javascript

復制

下載

// 打開或創建數據庫
const request = indexedDB.open('MyDatabase', 1);request.onupgradeneeded = (event) => {const db = event.target.result;// 創建對象存儲(類似于表)const store = db.createObjectStore('books', { keyPath: 'id' });// 創建索引store.createIndex('by_title', 'title', { unique: false });
};request.onsuccess = (event) => {const db = event.target.result;// 添加數據const transaction = db.transaction('books', 'readwrite');const store = transaction.objectStore('books');store.add({ id: 1, title: 'JavaScript高級編程', author: 'Nicholas C. Zakas' });// 查詢數據const getRequest = store.get(1);getRequest.onsuccess = () => {console.log(getRequest.result);};
};request.onerror = (event) => {console.error('數據庫錯誤:', event.target.error);
};

特點

  • 存儲大小:通常為磁盤空間的50%(各瀏覽器不同)

  • 異步操作,不會阻塞UI

  • 支持事務、索引和復雜查詢

  • 學習曲線較陡峭

適用場景

  • 離線應用數據存儲

  • 需要復雜查詢的大量數據

  • 漸進式Web應用(PWA)

  • 需要高性能讀寫的應用

4. Cache API:網絡請求緩存

Cache API 是Service Worker的一部分,主要用于緩存網絡請求和響應。

基本用法

javascript

復制

下載

// 打開緩存
caches.open('my-cache').then(cache => {// 添加緩存cache.add('/api/data.json');// 添加多個緩存cache.addAll(['/api/data.json', '/static/logo.png']);// 匹配緩存cache.match('/api/data.json').then(response => {if (response) {console.log('找到緩存:', response);}});
});

特點

  • 專門用于網絡請求緩存

  • 與Service Worker緊密集成

  • 支持離線體驗

  • 可以緩存任何類型的網絡響應

適用場景

  • 離線Web應用

  • 資源緩存加速加載

  • 網絡請求的緩存策略

5. 其他存儲選項

WebSQL (已廢棄)

雖然一些瀏覽器仍支持,但已被W3C廢棄,不建議在新項目中使用。

文件系統API

允許Web應用創建和操作本地文件系統,目前僅Chrome支持。

如何選擇合適的存儲方案?

選擇存儲方案時,考慮以下因素:

  1. 數據大小

    • 小數據:Cookie或Web Storage

    • 大數據:IndexedDB

  2. 數據結構

    • 簡單鍵值對:Web Storage

    • 復雜結構化數據:IndexedDB

  3. 數據持久性

    • 會話級:sessionStorage

    • 持久化:localStorage或IndexedDB

  4. 是否需要離線訪問

    • 需要:IndexedDB + Cache API

    • 不需要:Web Storage可能足夠

  5. 性能要求

    • 高性能:IndexedDB(異步)

    • 簡單操作:Web Storage(同步)

最佳實踐

  1. 敏感數據:永遠不要在客戶端存儲敏感信息(如密碼、支付信息)

  2. 清理策略:定期清理過期或無用數據

  3. 錯誤處理:所有存儲操作都應該有錯誤處理

  4. 容量檢查:存儲前檢查可用空間

  5. 數據加密:必要時對存儲數據進行加密

總結

JavaScript 提供了豐富的客戶端存儲選項,從簡單的 Cookie 到功能強大的 IndexedDB。理解每種技術的優缺點和適用場景,可以幫助你為應用選擇最合適的存儲方案。隨著 Progressive Web Apps 的興起,客戶端存儲變得越來越重要,掌握這些技術將幫助你構建更強大、更可靠的Web應用。

希望這篇指南能幫助你在項目中做出明智的存儲決策!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79768.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode 刷題記錄 09 —— 鏈表第三彈

本系列為筆者的 Leetcode 刷題記錄,順序為 Hot 100 題官方順序,根據標簽命名,記錄筆者總結的做題思路,附部分代碼解釋和疑問解答,01~07為C語言,08及以后為Java語言。 01 合并 K 個升序鏈表 /*** Definitio…

如何利用 Elastic Load Balancing 提升應用性能與可用性?

當今云計算的快速發展中,隨著應用需求的增加,如何確保系統能夠高效、穩定地處理不斷增長的流量成為了每個技術團隊關注的焦點。Elastic Load Balancing(ELB)作為一種強大的工具,能夠幫助開發者和運維人員輕松應對流量波…

Word如何制作三線表格

1.需求 將像這樣的表格整理成論文中需要的三線表格。 2.直觀流程 選中表格 --> 表格屬性中的邊框與底紋B --> 在設置中選擇無(重置表格)–> 確定 --> 選擇第一行(其實是將第一行看成獨立表格了,為了設置中線&…

JVM的雙親委派模型

引言 Java類加載機制中的雙親委派模型通過層層委托保證了核心類加載器與應用類加載器之間的職責分離和加載安全性,但其單向的委托關系也帶來了一些局限性。尤其是在核心類庫需要訪問或實例化由應用類加載器加載的類時,雙親委派模型無法滿足需求&#xf…

6.4.高并發設計

目錄 一、高并發系統設計基礎理論 CAP定理與高可用性權衡 ? 一致性(C) vs 可用性(A)在電商、社交場景的取舍 ? 分區容錯性(P)的實踐意義:異地多活與腦裂處理 性能指標與評估模型 ? QPS、TP…

工程師轉型算法工程師 深入淺出理解transformer-手搓板

編碼器 以下部分引用臺灣大學李宏毅教授的ppt 自己理解解釋一遍(在youtobe 上可以搜索李宏毅即可) 首先先來看transformer的架構圖 Embedding 我們先從Imput Embedding 跟 OutPutEmbedding 開始,讓我們用 bert 模型來做一個解釋 從huggingface上下載的bert-base…

軟件工程學概述

一、軟件危機 (一)軟件危機的介紹 1. 基本思想與定義 軟件危機(Software Crisis)是指在計算機軟件的開發和維護過程中所遇到的一系列嚴重問題,這些問題既包括技術層面的挑戰,也涉及管理層面的困境。其核心…

【ArcGIS Pro微課1000例】0068:Pro原來可以制作演示文稿(PPT)

文章目錄 一、新建演示文稿二、插入頁面1. 插入地圖2. 插入空白文檔3. 插入圖像4. 插入視頻三、播放與保存一、新建演示文稿 打開軟件,新建一個地圖文檔,再點擊【新建演示文稿】: 創建的演示文檔會默認保存在目錄中的演示文稿文件夾下。 然后可以對文檔進行簡單的設計,例如…

[吾愛出品][Windows] 產品銷售管理系統2.0

[Windows] 產品銷售管理系統 鏈接:https://pan.xunlei.com/s/VOPej1bHMRCHy2np9w3TBOyKA1?pwdgjy7# 使用方法:1、先設置一下圖片保存路徑 2、維護產品。客戶等基礎信息。例如:銷售類型:一次性 銷售編碼:RCX。 3、銷…

MySQL數據庫高可用(MHA)詳細方案與部署教程

一:MHA簡介 核心功能 二:MHA工作原理 三:MHA組件 四:MHA 架構與工具 MHA架構 Manager關鍵工具 Node工具 五:工作原理與流程 1: 故障檢測 2: 故障切換(Failover) 3 : 切換模式 六&a…

華為設備鏈路聚合實驗:網絡工程實戰指南

鏈路聚合就像為網絡搭建 “并行高速路”,既能擴容帶寬,又能保障鏈路冗余,超實用! 一、實驗拓撲速覽 圖中兩臺交換機 LSW1 和 LSW2,PC1、PC2 歸屬 VLAN 10,PC3 歸屬 VLAN 30。LSW1 與 LSW2 通過 GE0/0/1、…

數組和集合

數組和集合的區別: 1、數組是固定長度的數據結構,一旦創建長度就無法改變,集合是動態長度數據結構,可根據需求動態增加或減少元素。 2、數組包含基本數據類型和對象,而集合只能包含對象。 3、數組可以直接訪問元素&…

WPF MVVM進階系列教程(一、對話框)

🍠 WPF MVVM進階系列教程 一、對話框 在前面的文章中,我們介紹了MVVM開發的一些基礎知識。 對于日常開發來說,基本已經足夠應付大部分場景。 從這里開始,介紹的都是在MVVM模式開發中,提升程序可維護性、靈活性、健壯…

【AI News | 20250507】每日AI進展

AI Repos 1、CFWorkerACME SSL證書助手是一個免費開源的平臺,基于Cloudflare Worker運行,旨在自動化SSL證書的申請和下發,尤其適用于多服務器或內網環境。它通過自動化的CNAME和DNS操作完成域名驗證,支持Let’s Encrypt、ZeroSSL…

5 分鐘用滿血 DeepSeek R1 搭建個人 AI 知識庫(含本地部署)

最近很多朋友都在問:怎么本地部署 DeepSeek 搭建個人知識庫。 老實說,如果你不是為了研究技術,或者確實需要保護涉密數據,我真不建議去折騰本地部署。 為什么呢? 目前 Ollama 從 1.5B 到 70B 都只是把 R1 的推理能力提煉到 Qwen 和 Llama 的蒸餾版本上。 雖說性能是提升…

極狐GitLab 分支管理功能介紹

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 分支 (BASIC ALL) 分支是項目工作樹的一個版本。分支是項目開發的基礎。當你創建一個新的項目時,極狐GitLab 會為…

基于ASP.NET+MySQL實現待辦任務清單系統

基于ASP.NET的ToDoList的設計與實現 一、前言 1.1 實驗目的 使學生綜合使用所學過的ASP.NET網絡編程知識,掌握網絡環境程序設計的基本概念;結合實際的操作和設計,鞏固課堂學習內容,掌握網絡環境編程的特點、原理和技術&#xf…

普通 html 項目引入 tailwindcss

項目根目錄安裝依賴 npm install -D tailwindcss3 postcss autoprefixer 初始化生成tailwind.config.js npx tailwindcss init 修改tailwind.config.js /** type {import(tailwindcss).Config} */ module.exports {content: ["./index.html"], //根據自己的項目…

汽車免拆診斷案例 | 2015款奔馳C200L車發動機起動延遲

故障現象  一輛2015款奔馳C200L車,搭載274發動機,累計行駛里程約為15.6萬km。該車發動機起動延遲,且發動機故障燈異常點亮。 故障診斷  用故障檢測儀檢測,發動機控制單元中存儲有故障代碼“P001685 進氣凸輪軸(氣缸…

[藍橋杯 2025 省 B] 水質檢測(暴力 )

暴力暴力 菜鳥第一次寫題解,多多包涵!!! 這個題目的數據量很小,所以沒必要去使用bfs,直接分情況討論即可 一共兩排數據,我們使用貪心的思想,只需要實現從左往右的過程中每個檢測器相互連接即…