欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript前端中實(shí)現(xiàn)本地儲(chǔ)存的常用方式繪制

 更新時(shí)間:2025年03月20日 10:25:43   作者:懶羊羊我小弟  
JavaScript本地存儲(chǔ)是Web開(kāi)發(fā)中用于在客戶端存儲(chǔ)數(shù)據(jù)的重要技術(shù),本文為大家整理了一些常見(jiàn)方式及其區(qū)別和應(yīng)用場(chǎng)景,大家可以根據(jù)需求進(jìn)行選擇

一、WEB瀏覽器本地存儲(chǔ)方式及特點(diǎn)

1.1 儲(chǔ)存方式

1. Cookie

存儲(chǔ)容量:約 4KB(每個(gè)域名)。

生命周期:可設(shè)置過(guò)期時(shí)間;默認(rèn)隨會(huì)話結(jié)束失效。

作用域:同源頁(yè)面共享。

訪問(wèn)方式:通過(guò) document.cookie 讀寫,每次HTTP請(qǐng)求自動(dòng)攜帶。

特點(diǎn):支持服務(wù)器端操作(通過(guò)HTTP頭),但存儲(chǔ)效率低,易被XSS攻擊。

// 設(shè)置 Cookie
function setCookie(name, value, days) {
    let expires = "";
    if (days) {
        const date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "") + expires + "; path=/";
}

// 獲取 Cookie
function getCookie(name) {
    const nameEQ = name + "=";
    const ca = document.cookie.split(';');
    for (let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) === ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

// 刪除 Cookie
function deleteCookie(name) {
    document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

// 使用示例
setCookie('username', 'John', 7);
const username = getCookie('username');
console.log(username); 
deleteCookie('username');

2. Web Storage

localStorage

存儲(chǔ)容量:約 5-10MB(不同瀏覽器)。

生命周期:永久存儲(chǔ),需手動(dòng)清除。

作用域:同源頁(yè)面共享。

訪問(wèn)方式:同步API,鍵值對(duì)存儲(chǔ)(僅支持字符串,需用JSON轉(zhuǎn)換對(duì)象)。

// 存儲(chǔ)數(shù)據(jù)
localStorage.setItem('key', 'value');
// 獲取數(shù)據(jù)
const storageKey = localStorage.getItem('key');
// 刪除數(shù)據(jù)
localStorage.removeItem('key');
// 清除所有數(shù)據(jù)
localStorage.clear();

sessionStorage

存儲(chǔ)容量:同 localStorage。

生命周期:頁(yè)面會(huì)話結(jié)束(關(guān)閉標(biāo)簽頁(yè))即清除。

作用域:僅當(dāng)前標(biāo)簽頁(yè)內(nèi)共享。

訪問(wèn)方式:同 localStorage。

// 存儲(chǔ)數(shù)據(jù)
sessionStorage.setItem('key', 'value');
// 獲取數(shù)據(jù)
const storageKey = sessionStorage.getItem('key');
// 刪除數(shù)據(jù)
sessionStorage.removeItem('key');
// 清除所有數(shù)據(jù)
sessionStorage.clear();

3. IndexedDB

存儲(chǔ)容量:動(dòng)態(tài)分配,通常 50% 磁盤空間(瀏覽器策略限制)。

生命周期:永久存儲(chǔ),需手動(dòng)清除。

作用域:同源頁(yè)面共享。

訪問(wèn)方式:異步API,支持事務(wù)、索引和結(jié)構(gòu)化數(shù)據(jù)(包括文件)。

特點(diǎn):適合復(fù)雜查詢和大數(shù)據(jù)存儲(chǔ),但API較復(fù)雜。

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

// 數(shù)據(jù)庫(kù)升級(jí)時(shí)觸發(fā)
request.onupgradeneeded = function(event) {
    const db = event.target.result;
    const objectStore = db.createObjectStore('users', { keyPath: 'id' });
    objectStore.createIndex('name', 'name', { unique: false });
};

// 打開(kāi)數(shù)據(jù)庫(kù)成功
request.onsuccess = function(event) {
    const db = event.target.result;
    const transaction = db.transaction(['users'], 'readwrite');
    const objectStore = transaction.objectStore('users');

    // 添加數(shù)據(jù)
    const user = { id: 1, name: 'John' };
    const addRequest = objectStore.add(user);
    addRequest.onsuccess = function(event) {
        console.log('Data added successfully');
    };

    // 獲取數(shù)據(jù)
    const getRequest = objectStore.get(1);
    getRequest.onsuccess = function(event) {
        const data = event.target.result;
        console.log(data);
    };

    // 關(guān)閉數(shù)據(jù)庫(kù)
    transaction.oncomplete = function() {
        db.close();
    };
};

// 打開(kāi)數(shù)據(jù)庫(kù)失敗
request.onerror = function(event) {
    console.error('Database error: ', event.target.errorCode);
};

4. Cache API

存儲(chǔ)容量:動(dòng)態(tài)分配,依賴瀏覽器限制。

生命周期:需手動(dòng)管理(Service Worker控制)。

作用域:同源,用于緩存網(wǎng)絡(luò)請(qǐng)求。

訪問(wèn)方式:異步API,存儲(chǔ)請(qǐng)求-響應(yīng)對(duì)。

特點(diǎn):主要用于PWA離線資源緩存。

1.2 核心區(qū)別對(duì)比

特性CookielocalStoragesessionStorageIndexedDBCache API
容量4KB5-10MB5-10MB數(shù)百M(fèi)B動(dòng)態(tài)分配
生命周期可設(shè)置過(guò)期時(shí)間永久頁(yè)面會(huì)話永久手動(dòng)管理
數(shù)據(jù)格式字符串字符串字符串結(jié)構(gòu)化數(shù)據(jù)、二進(jìn)制請(qǐng)求-響應(yīng)對(duì)
訪問(wèn)方式同步(自動(dòng)傳至服務(wù)器)同步同步異步異步
適用場(chǎng)景會(huì)話管理、身份驗(yàn)證長(zhǎng)期偏好設(shè)置臨時(shí)頁(yè)面數(shù)據(jù)復(fù)雜離線應(yīng)用數(shù)據(jù)離線資源緩存

1.3 應(yīng)用場(chǎng)景

Cookie

  • 用戶登錄狀態(tài)(Session ID)。
  • 跟蹤用戶行為(需注意隱私合規(guī)性)。

localStorage

  • 長(zhǎng)期保存的用戶配置(如主題、語(yǔ)言)。
  • 緩存靜態(tài)資源(如不常變化的JSON數(shù)據(jù))。

sessionStorage

  • 單頁(yè)面表單的臨時(shí)保存(避免頁(yè)面刷新丟失)。
  • 當(dāng)前會(huì)話的臨時(shí)狀態(tài)(如分頁(yè)參數(shù))。

IndexedDB

  • 離線應(yīng)用的核心數(shù)據(jù)存儲(chǔ)(如郵件客戶端、文檔編輯器)。
  • 需要復(fù)雜查詢的大數(shù)據(jù)集(如本地?cái)?shù)據(jù)庫(kù))。

Cache API

  • PWA的靜態(tài)資源離線緩存(HTML/CSS/JS/圖片)。
  • 加速重復(fù)訪問(wèn)的資源加載。

1.4 安全性注意事項(xiàng)

  • Cookie:優(yōu)先設(shè)置 HttpOnly 和 Secure 防止XSS和中間人攻擊。
  • Web Storage:避免存儲(chǔ)敏感信息,易受XSS攻擊。
  • IndexedDB:需處理數(shù)據(jù)加密(如用戶隱私數(shù)據(jù))。

根據(jù)需求選擇合適存儲(chǔ)方式,平衡容量、性能與安全性。

二、APP與小程序

2.1 原生APP

1. iOS

NSUserDefaults:是一個(gè)輕量級(jí)的鍵值對(duì)存儲(chǔ)系統(tǒng),適合存儲(chǔ)用戶偏好設(shè)置、簡(jiǎn)單的配置信息等,例如用戶是否開(kāi)啟夜間模式、字體大小設(shè)置等。數(shù)據(jù)存儲(chǔ)在應(yīng)用沙盒的特定文件中,使用方便,能存儲(chǔ)基本數(shù)據(jù)類型、數(shù)組、字典等。

Core Data:是蘋果提供的一個(gè)對(duì)象圖管理和持久化框架,用于管理應(yīng)用程序中的數(shù)據(jù)模型。它可以將數(shù)據(jù)存儲(chǔ)到 SQLite 數(shù)據(jù)庫(kù)中,適合存儲(chǔ)復(fù)雜的、有結(jié)構(gòu)的數(shù)據(jù),如社交應(yīng)用中的用戶關(guān)系、筆記應(yīng)用中的筆記信息等

File System:可以直接操作文件系統(tǒng)來(lái)存儲(chǔ)和讀取數(shù)據(jù),適合存儲(chǔ)較大的文件,如圖片、音頻、視頻等。應(yīng)用可以在應(yīng)用沙盒的指定目錄下創(chuàng)建文件,并進(jìn)行讀寫操作。

2. Android

SharedPreferences:以鍵值對(duì)的形式存儲(chǔ)簡(jiǎn)單的數(shù)據(jù),數(shù)據(jù)存儲(chǔ)在 XML 文件中。常用于存儲(chǔ)用戶的登錄狀態(tài)、應(yīng)用的配置信息等,例如用戶的用戶名、用戶選擇的主題等。

SQLite Database:是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫(kù),適合存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),如聯(lián)系人信息、任務(wù)列表等。通過(guò) SQLiteOpenHelper 類可以方便地創(chuàng)建、管理和操作數(shù)據(jù)庫(kù)。

Internal Storage 和 External Storage:Internal Storage 用于在設(shè)備內(nèi)部存儲(chǔ)應(yīng)用的私有數(shù)據(jù),如應(yīng)用的配置文件、臨時(shí)數(shù)據(jù)等;External Storage 可用于存儲(chǔ)一些共享的文件,如圖片、下載的文件等,但需要注意權(quán)限問(wèn)題。

2.2 跨平臺(tái) APP

AsyncStorage(React Native):是 React Native 提供的一個(gè)簡(jiǎn)單的、異步的、持久化的鍵值對(duì)存儲(chǔ)系統(tǒng),類似于 Web 中的 localStorage。它適用于存儲(chǔ)少量的、簡(jiǎn)單的數(shù)據(jù),如用戶的登錄令牌、應(yīng)用的一些簡(jiǎn)單配置等

SharedPreferences(Flutter 中的 shared_preferences 插件):功能類似于 Android 的 SharedPreferences,提供了簡(jiǎn)單的鍵值對(duì)存儲(chǔ)功能,方便在 Flutter 應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù)。

SQLite(Flutter 中的 sqflite 插件):可以在 Flutter 應(yīng)用中使用 SQLite 數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),其使用方式與原生 Android 中的 SQLite 類似。

2.3 小程序

微信小程序

  • wx.setStorage 和 wx.getStorage:這是微信小程序提供的基本的本地存儲(chǔ) API,以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù)??梢源鎯?chǔ)字符串、數(shù)字、對(duì)象等數(shù)據(jù)類型,適合存儲(chǔ)用戶的瀏覽記錄、緩存的頁(yè)面數(shù)據(jù)等。
  • wx.setStorageSync 和 wx.getStorageSync:是同步版本的存儲(chǔ)和讀取 API,使用起來(lái)更簡(jiǎn)單,但可能會(huì)阻塞主線程,影響性能,因此建議在數(shù)據(jù)量較小且對(duì)性能要求不高的場(chǎng)景下使用。

支付寶小程序

  • my.setStorage 和 my.getStorage:與微信小程序類似,也是以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),可用于存儲(chǔ)用戶的偏好設(shè)置、臨時(shí)數(shù)據(jù)等。
  • my.setStorageSync 和 my.getStorageSync:同步版本的存儲(chǔ)和讀取 API,使用時(shí)需注意性能問(wèn)題。

2.4 區(qū)別

1.存儲(chǔ)容量

APP:原生 APP 可以根據(jù)需要使用文件系統(tǒng)和數(shù)據(jù)庫(kù)存儲(chǔ)大量的數(shù)據(jù),理論上只要設(shè)備存儲(chǔ)空間允許,存儲(chǔ)容量可以很大。例如,一些視頻播放 APP 可以將大量的視頻文件緩存到本地。

小程序:小程序的本地存儲(chǔ)容量通常有限制,如微信小程序單個(gè) key 允許存儲(chǔ)的最大數(shù)據(jù)長(zhǎng)度為 1MB,所有數(shù)據(jù)存儲(chǔ)上限為 10MB。這是為了避免小程序占用過(guò)多的設(shè)備存儲(chǔ)空間。

2.數(shù)據(jù)安全性

APP:原生 APP 可以通過(guò)應(yīng)用沙盒機(jī)制來(lái)保護(hù)數(shù)據(jù)的安全性,數(shù)據(jù)只能被應(yīng)用本身訪問(wèn)。同時(shí),還可以使用加密技術(shù)對(duì)敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ),如用戶的密碼、支付信息等。

小程序:小程序的數(shù)據(jù)存儲(chǔ)在用戶的設(shè)備上,但由于小程序的運(yùn)行環(huán)境相對(duì)開(kāi)放,數(shù)據(jù)的安全性相對(duì)較低。雖然小程序平臺(tái)也會(huì)采取一些安全措施,但在處理敏感數(shù)據(jù)時(shí)仍需謹(jǐn)慎。

3.使用便捷性

APP:原生 APP 的存儲(chǔ)方式相對(duì)復(fù)雜,需要掌握不同平臺(tái)的存儲(chǔ) API 和數(shù)據(jù)庫(kù)操作方法??缙脚_(tái) APP 雖然提供了統(tǒng)一的存儲(chǔ)接口,但也需要了解相應(yīng)的插件和使用方法。

小程序:小程序的存儲(chǔ) API 簡(jiǎn)單易用,開(kāi)發(fā)人員可以快速上手,使用起來(lái)更加便捷。

2.5 應(yīng)用場(chǎng)景

APP

  • 大量數(shù)據(jù)存儲(chǔ):當(dāng)應(yīng)用需要存儲(chǔ)大量的結(jié)構(gòu)化數(shù)據(jù)或文件時(shí),如電商 APP 的商品信息、音樂(lè) APP 的歌曲文件等,適合使用數(shù)據(jù)庫(kù)或文件系統(tǒng)進(jìn)行存儲(chǔ)。
  • 復(fù)雜數(shù)據(jù)管理:對(duì)于需要進(jìn)行復(fù)雜數(shù)據(jù)管理和操作的應(yīng)用,如社交 APP 的用戶關(guān)系管理、辦公 APP 的文檔管理等,使用數(shù)據(jù)庫(kù)存儲(chǔ)可以更好地滿足需求。
  • 敏感數(shù)據(jù)處理:當(dāng)應(yīng)用需要處理敏感數(shù)據(jù)時(shí),如金融 APP 的用戶賬戶信息、醫(yī)療 APP 的患者健康數(shù)據(jù)等,原生 APP 可以通過(guò)加密和安全機(jī)制來(lái)保證數(shù)據(jù)的安全性。

小程序

  • 臨時(shí)數(shù)據(jù)緩存:小程序可以將用戶的瀏覽記錄、搜索歷史等臨時(shí)數(shù)據(jù)存儲(chǔ)在本地,以提高用戶體驗(yàn)。例如,新聞小程序可以緩存用戶最近瀏覽的新聞文章,方便用戶離線閱讀。
  • 簡(jiǎn)單配置信息存儲(chǔ):對(duì)于一些簡(jiǎn)單的應(yīng)用配置信息,如用戶的字體大小設(shè)置、主題顏色選擇等,可以使用小程序的本地存儲(chǔ)功能進(jìn)行存儲(chǔ)。
  • 快速開(kāi)發(fā)場(chǎng)景:由于小程序的存儲(chǔ) API 簡(jiǎn)單易用,適合在快速開(kāi)發(fā)的場(chǎng)景中使用,如一些簡(jiǎn)單的工具類小程序、活動(dòng)推廣小程序等。

以上就是JavaScript前端中實(shí)現(xiàn)本地儲(chǔ)存的常用方式繪制的詳細(xì)內(nèi)容,更多關(guān)于前端本地儲(chǔ)存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的代碼詳解

    JS實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的代碼詳解

    很多前端的同學(xué)對(duì)數(shù)據(jù)結(jié)構(gòu)和算法這塊沒(méi)有太多的概念,很多l(xiāng)eetcode的題目看不懂,有時(shí)候可能看了題解也不知道是什么意思,這篇文章咱們來(lái)簡(jiǎn)單的談一談鏈表,文中給大家介紹了JS實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的示例代碼,需要的朋友可以參考下
    2024-01-01
  • JavaScript的各種常見(jiàn)函數(shù)定義方法

    JavaScript的各種常見(jiàn)函數(shù)定義方法

    這篇文章主要介紹了JavaScript的各種常見(jiàn)函數(shù)定義方法,包含了一些技巧的測(cè)試與分析總結(jié),需要的朋友可以參考下
    2014-09-09
  • Postman的下載及安裝教程詳解

    Postman的下載及安裝教程詳解

    這篇文章主要介紹了Postman的下載及安裝教程詳解,今天給大家介紹的這款網(wǎng)頁(yè)調(diào)試工具不僅可以調(diào)試簡(jiǎn)單的css、html、腳本等簡(jiǎn)單的網(wǎng)頁(yè)基本信息,它還可以發(fā)送幾乎所有類型的HTTP請(qǐng)求!需要的朋友可以參考下
    2018-10-10
  • onclick與listeners的執(zhí)行先后問(wèn)題詳細(xì)解剖

    onclick與listeners的執(zhí)行先后問(wèn)題詳細(xì)解剖

    javascript中onclick與listeners的執(zhí)行先后問(wèn)題一直都是大家所疑惑的地方,接下來(lái)將為大家解決此疑惑,感興趣的朋友可以了解下哦
    2013-01-01
  • javascript運(yùn)算符——邏輯運(yùn)算符全面解析

    javascript運(yùn)算符——邏輯運(yùn)算符全面解析

    下面小編就為大家?guī)?lái)一篇javascript運(yùn)算符——邏輯運(yùn)算符詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • javascript如何在foreach循環(huán)完成之后執(zhí)行一個(gè)回調(diào)函數(shù)

    javascript如何在foreach循環(huán)完成之后執(zhí)行一個(gè)回調(diào)函數(shù)

    forEach()是前端開(kāi)發(fā)中操作數(shù)組的一種方法,主要功能是遍歷數(shù)組,其實(shí)就是 for 循環(huán)的升級(jí)版,下面這篇文章主要給大家介紹了關(guān)于javascript如何在foreach循環(huán)完成之后執(zhí)行一個(gè)回調(diào)函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • JavaScript基礎(chǔ)之this和箭頭函數(shù)詳析

    JavaScript基礎(chǔ)之this和箭頭函數(shù)詳析

    這篇文章主要給大家介紹了關(guān)于JavaScript基礎(chǔ)之this和箭頭函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JS圖片等比例縮放方法完整示例

    JS圖片等比例縮放方法完整示例

    這篇文章主要介紹了JS圖片等比例縮放方法,結(jié)合完整實(shí)例形式分析了javascript針對(duì)頁(yè)面圖片元素屬性操作的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • JS身份證信息驗(yàn)證正則表達(dá)式

    JS身份證信息驗(yàn)證正則表達(dá)式

    很多時(shí)候我們都是通過(guò)一組正則表達(dá)式來(lái)判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,首先要做到的是對(duì)身份證信息的一些效驗(yàn)規(guī)則
    2017-06-06
  • JS+CSS實(shí)現(xiàn)的藍(lán)色table選項(xiàng)卡效果

    JS+CSS實(shí)現(xiàn)的藍(lán)色table選項(xiàng)卡效果

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的藍(lán)色table選項(xiàng)卡效果,通過(guò)鼠標(biāo)事件調(diào)用自定義函數(shù)實(shí)現(xiàn)頁(yè)面元素樣式的遍歷與動(dòng)態(tài)切換效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10

最新評(píng)論