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

前端存儲后端響應數(shù)據(jù)超詳細的實現(xiàn)方式和注意事項

 更新時間:2025年03月27日 11:58:29   作者:z2637305611  
前端通過多種方式向后端獲取數(shù)據(jù),下面這篇文章主要介紹了前端存儲后端響應數(shù)據(jù)超詳細的實現(xiàn)方式和注意事項,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在前端存儲后端響應數(shù)據(jù)是常見需求,可以優(yōu)化性能(減少重復請求)、支持離線訪問或提升用戶體驗。以下是超詳細的實現(xiàn)方式和注意事項:

一、前端存儲后端數(shù)據(jù)的核心步驟

1. 獲取后端數(shù)據(jù)

使用 fetch 或 axios 發(fā)送請求:

<JAVASCRIPT>

// 使用 fetch
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => saveData(data))
  .catch(err => console.error('請求失敗:', err));

// 或使用 async/await
async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    saveData(data);
  } catch (error) {
    console.error('請求失敗:', error);
  }
}

2. 存儲數(shù)據(jù)

根據(jù)數(shù)據(jù)量、訪問頻率和緩存策略選擇合適的存儲方式:

二、前端存儲技術的選擇

1. 短期緩存(會話級別)

(1) sessionStorage

  • 特點:會話級存儲,關閉標簽頁后失效。
  • 適用場景:臨時保存需要跨頁面使用的敏感信息。
  • 代碼示例

    <JAVASCRIPT>

    // 存儲
    const data = { userId: 123, token: 'abcdef' };
    sessionStorage.setItem('sessionData', JSON.stringify(data));
    
    // 讀取
    const sessionData = JSON.parse(sessionStorage.getItem('sessionData'));

2. 長期緩存(持久化存儲)

(1) localStorage

  • 特點:數(shù)據(jù)永久存儲,需手動清除,單域名容量約 5MB。
  • 適用場景:緩存基礎配置、用戶偏好等非敏感數(shù)據(jù)。
  • 代碼示例

    <JAVASCRIPT>

    // 存儲
    const userPrefs = { theme: 'dark', language: 'zh-CN' };
    localStorage.setItem('userPrefs', JSON.stringify(userPrefs));
    
    // 讀取時處理異常
    try {
      const prefs = JSON.parse(localStorage.getItem('userPrefs'));
    } catch (e) {
      console.error('解析失敗:', e);
      localStorage.removeItem('userPrefs'); // 清理損壞數(shù)據(jù)
    }

(2) IndexedDB

  • 特點:支持存儲大量結構化數(shù)據(jù)(上限約 50% 硬盤空間),支持事務、索引。
  • 適用場景:緩存復雜數(shù)據(jù)集(如用戶歷史操作)、離線應用。
  • 代碼示例

    <JAVASCRIPT>

    // 打開或創(chuàng)建數(shù)據(jù)庫
    const request = indexedDB.open('MyAppDB', 1);
    
    request.onupgradeneeded = (event) => {
      const db = event.target.result;
      if (!db.objectStoreNames.contains('userData')) {
        db.createObjectStore('userData', { keyPath: 'id' });
      }
    };
    
    request.onsuccess = (event) => {
      const db = event.target.result;
      const transaction = db.transaction('userData', 'readwrite');
      const store = transaction.objectStore('userData');
    
      // 存儲數(shù)據(jù)
      store.put({ id: 1, name: 'John', orders: [123, 456] });
    };

3. 內(nèi)存緩存

(1) 全局變量或狀態(tài)管理(Vuex、Redux)

  • 特點:數(shù)據(jù)僅在頁面刷新前有效,響應速度快。
  • 適用場景:高頻訪問的共享狀態(tài)(如用戶登錄信息)。
  • 代碼示例(Redux)

    <JAVASCRIPT>

    // Action
    const fetchUserData = () => async (dispatch) => {
      const data = await fetch('/api/user');
      dispatch({ type: 'SET_USER_DATA', payload: data });
    };
    
    // Reducer
    const initialState = { userData: null };
    const reducer = (state = initialState, action) => {
      switch (action.type) {
        case 'SET_USER_DATA':
          return { ...state, userData: action.payload };
        default:
          return state;
      }
    };

三、緩存策略進階

1. 為存儲數(shù)據(jù)添加元信息

存儲數(shù)據(jù)時附加時間戳或版本號,便于后續(xù)驗證有效性:

<JAVASCRIPT>

const cacheEntry = {
  data: { /* 后端返回的數(shù)據(jù) */ },
  timestamp: new Date().getTime(),
  version: '1.0.2',
};
localStorage.setItem('cachedData', JSON.stringify(cacheEntry));

2. 緩存失效策略

  • 基于時間:設置有效期(如緩存 1 小時):

    <JAVASCRIPT>

    const CACHE_EXPIRY = 3600 * 1000; // 1小時
    
    function isCacheValid(cachedData) {
      return (Date.now() - cachedData.timestamp) < CACHE_EXPIRY;
    }
  • 基于版本:當后端數(shù)據(jù)結構變更時強制更新:

    <JAVASCRIPT>

    const API_VERSION = '2.3.0';
    
    function checkCacheVersion(cachedData) {
      return cachedData.version === API_VERSION;
    }

四、完整示例:結合緩存的請求邏輯

<JAVASCRIPT>

async function fetchDataWithCache() {
  // 檢查是否有有效緩存
  const cachedData = JSON.parse(localStorage.getItem('cachedData'));
  if (cachedData && isCacheValid(cachedData)) {
    return cachedData.data; // 直接使用緩存
  }

  // 沒有有效緩存則發(fā)起請求
  try {
    const response = await fetch('https://api.example.com/data');
    const freshData = await response.json();

    // 更新緩存
    const newCache = {
      data: freshData,
      timestamp: Date.now(),
      version: API_VERSION,
    };
    localStorage.setItem('cachedData', JSON.stringify(newCache));

    return freshData;
  } catch (error) {
    console.error('請求失敗:', error);
    if (cachedData) return cachedData.data; // 降級使用舊數(shù)據(jù)
    throw error;
  }
}

五、關鍵注意事項

1. 安全性

  • 絕對不要存儲敏感數(shù)據(jù)(如密碼、支付信息),即使使用 localStorage 也不安全。
  • 使用 HTTP Only Cookies :涉及身份驗證的 Token 應通過安全 Cookie 傳輸。

2. 序列化與反序列化

  • localStorage 只能存儲字符串,存儲對象需用 JSON.stringify
  • 解析時使用 try/catch 防止 JSON 格式錯誤導致頁面崩潰:

    <JAVASCRIPT>

    try {
      const data = JSON.parse(localStorage.getItem('data'));
    } catch (e) {
      console.error('解析失敗:', e);
    }

3. 存儲上限

存儲方式容量限制
localStorage約 5MB(不同瀏覽器差異)
IndexedDB一般不少于 250MB
Cookies每個域名約 4KB

4. 隱私模式兼容

  • 部分瀏覽器隱私模式下會禁用 localStorage,需做好錯誤處理:

    <JAVASCRIPT>

    function isLocalStorageAvailable() {
      try {
        localStorage.setItem('test', 'test');
        localStorage.removeItem('test');
        return true;
      } catch (e) {
        return false;
      }
    }

六、高級場景

1. Service Worker 緩存

配合 Cache API 實現(xiàn)離線優(yōu)先策略:

<JAVASCRIPT>

// service-worker.js
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request)
      .then(cachedResponse => cachedResponse || fetch(event.request))
  );
});

2. 數(shù)據(jù)加密

提升敏感信息存儲安全性(需結合 HTTPS):

<JAVASCRIPT>

import CryptoJS from 'crypto-js';

const SECRET_KEY = 'your-secret-key';

// 加密存儲
const encryptedData = CryptoJS.AES.encrypt(
  JSON.stringify(data),
  SECRET_KEY
).toString();
localStorage.setItem('encryptedData', encryptedData);

// 解密讀取
const bytes = CryptoJS.AES.decrypt(encryptedData, SECRET_KEY);
const originalData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

通過合理利用前端存儲技術,可以顯著提升應用性能,但需權衡安全性、數(shù)據(jù)一致性和用戶體驗。在實踐中需結合具體場景選擇最佳方案。

總結

到此這篇關于前端存儲后端響應數(shù)據(jù)的文章就介紹到這了,更多相關前端存儲后端響應數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JSON字符串和JSON對象相互轉(zhuǎn)化實例詳解

    JSON字符串和JSON對象相互轉(zhuǎn)化實例詳解

    這篇文章主要介紹了JSON字符串和JSON對象相互轉(zhuǎn)化方法,結合實例形式詳細分析了json對象與字符串的功能、使用、轉(zhuǎn)換方法及相關注意事項,需要的朋友可以參考下
    2017-01-01
  • js實現(xiàn)頁面多個日期時間倒計時效果

    js實現(xiàn)頁面多個日期時間倒計時效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)頁面多個日期時間倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Bootstrap實現(xiàn)模態(tài)框效果

    Bootstrap實現(xiàn)模態(tài)框效果

    這篇文章主要為大家詳細介紹了Bootstrap實現(xiàn)模態(tài)框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 不錯的asp中顯示新聞的功能

    不錯的asp中顯示新聞的功能

    不錯的asp中顯示新聞的功能...
    2006-10-10
  • JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片實例代碼

    JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片實例代碼

    大家都知道Swiper(Swiper master)是目前應用較廣泛的移動端網(wǎng)頁觸摸內(nèi)容滑動js插件。下面這篇文章主要給大家介紹了在JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片的相關資料,文中給出了完整的示例代碼供大家參考學習,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • Webpack之plugin的使用

    Webpack之plugin的使用

    本文主要介紹了Webpack之plugin的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Windows下支持自動更新的Electron應用腳手架的方法

    Windows下支持自動更新的Electron應用腳手架的方法

    這篇文章主要介紹了Windows下支持自動更新的Electron應用腳手架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 微信小程序?qū)W習總結(三)條件、模板、文件引用實例分析

    微信小程序?qū)W習總結(三)條件、模板、文件引用實例分析

    這篇文章主要介紹了微信小程序條件、模板、文件引用,結合實例形式分析了微信小程序if條件判斷、模板調(diào)用、wxss文件引用等相關操作技巧,需要的朋友可以參考下
    2020-06-06
  • cropperjs實現(xiàn)裁剪圖片功能

    cropperjs實現(xiàn)裁剪圖片功能

    這篇文章主要為大家詳細介紹了cropperjs實現(xiàn)裁剪圖片功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • JavaScript實現(xiàn)簡單計算器

    JavaScript實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論