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

前端緩存策略及其應(yīng)用場景詳解

 更新時(shí)間:2025年07月16日 09:34:23   作者:執(zhí)夢起航  
緩存從來都是前端的一個(gè)痛點(diǎn),很多前端搞不清楚緩存到底是何物這篇文章主要介紹了前端緩存策略及其應(yīng)用場景的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前端緩存是提升網(wǎng)站性能和用戶體驗(yàn)的關(guān)鍵技術(shù),主要分為 瀏覽器緩存、應(yīng)用層緩存CDN緩存、內(nèi)存緩存。以下是常見策略及其應(yīng)用場景:

一、瀏覽器緩存(HTTP 緩存)

1. 強(qiáng)緩存(Cache-Control/Expires)

  • 原理:直接使用本地緩存,無需請求服務(wù)器。
  • 控制頭
    • Cache-Control: max-age=3600(優(yōu)先)
    • Expires: Wed, 21 Oct 2025 07:28:00 GMT(舊版,受本地時(shí)間影響)
  • 適用場景:靜態(tài)資源(如 JS、CSS、圖片)。
  • 示例配置(Nginx)
    location ~* \.(js|css|png|jpg|gif|svg)$ {
        expires 7d;  # 緩存 7 天
        add_header Cache-Control "public";
    }
    

2. 協(xié)商緩存(ETag/Last-Modified)

  • 原理:發(fā)送請求到服務(wù)器驗(yàn)證緩存是否可用,若未修改則返回 304。
  • 控制頭
    • ETag: "123456789"(文件哈希值)
    • Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT(文件修改時(shí)間)
  • 適用場景:可能變化但需精確控制的資源(如用戶頭像)。
  • 示例代碼(Node.js)
    const http = require('http');
    const fs = require('fs');
    const crypto = require('crypto');
    
    http.createServer((req, res) => {
      fs.readFile('index.html', (err, data) => {
        const hash = crypto.createHash('md5').update(data).digest('hex');
        if (req.headers['if-none-match'] === hash) {
          res.statusCode = 304;
          return res.end();
        }
        res.setHeader('ETag', hash);
        res.end(data);
      });
    }).listen(3000);
    

二、應(yīng)用層緩存

1. LocalStorage/SessionStorage

  • 特點(diǎn)
    • 存儲(chǔ)大?。?-10MB(不同瀏覽器)。
    • 數(shù)據(jù)類型:字符串(需 JSON 序列化)。
    • 有效期:localStorage 永久,sessionStorage 會(huì)話結(jié)束清除。
  • 適用場景:用戶偏好設(shè)置、臨時(shí)數(shù)據(jù)(如購物車)。
  • 示例代碼
    // 存儲(chǔ)
    localStorage.setItem('user', JSON.stringify({ name: 'John', age: 30 }));
    
    // 讀取
    const user = JSON.parse(localStorage.getItem('user'));
    

2. IndexedDB

  • 特點(diǎn)
    • 存儲(chǔ)大?。簾o明確限制(受硬盤空間約束)。
    • 支持事務(wù)和索引,適合存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。
    • 異步 API,避免阻塞主線程。
  • 適用場景:大量數(shù)據(jù)緩存(如離線地圖、郵件客戶端)。
  • 示例代碼
    const request = indexedDB.open('myDatabase', 1);
    
    request.onsuccess = (event) => {
      const db = event.target.result;
      const transaction = db.transaction(['users'], 'readwrite');
      const store = transaction.objectStore('users');
      store.put({ id: 1, name: 'John' });
    };
    

3. Service Worker

  • 特點(diǎn)
    • 運(yùn)行在瀏覽器后臺(tái)的獨(dú)立線程。
    • 攔截網(wǎng)絡(luò)請求,實(shí)現(xiàn)離線緩存和推送通知。
  • 適用場景:離線應(yīng)用(如 PWA)、靜態(tài)資源預(yù)緩存。
  • 示例代碼(注冊 Service Worker)
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/service-worker.js')
        .then(registration => {
          console.log('Service Worker 注冊成功');
        });
    }
    
     
    // service-worker.js
    self.addEventListener('fetch', (event) => {
      event.respondWith(
        caches.match(event.request)
          .then(cachedResponse => cachedResponse || fetch(event.request))
      );
    });
    

三、CDN 緩存

  • 原理:內(nèi)容分發(fā)網(wǎng)絡(luò)在全球多個(gè)節(jié)點(diǎn)緩存資源,用戶就近訪問。
  • 優(yōu)勢
    • 加速靜態(tài)資源加載(如 JS 庫、圖片)。
    • 減輕源服務(wù)器壓力。
  • 示例配置(使用 UNPKG CDN)
    <script src="https://unpkg.com/react@18.2.0/umd/react.production.min.js"></script>
    

四、內(nèi)存緩存(Runtime Cache)

  • 特點(diǎn)
    • 存儲(chǔ)在 JS 變量中,讀取速度極快。
    • 頁面刷新后失效。
  • 適用場景:高頻訪問數(shù)據(jù)(如用戶信息)。
  • 示例代碼
    const cache = new Map();
    
    function getData(key) {
      if (cache.has(key)) {
        return cache.get(key);
      }
      const data = fetchDataFromServer(key);
      cache.set(key, data);
      return data;
    }
    

五、緩存策略選擇指南

場景推薦緩存方案
靜態(tài)資源(JS/CSS/ 圖片)HTTP 強(qiáng)緩存 + CDN
動(dòng)態(tài)數(shù)據(jù)(如 API 響應(yīng))協(xié)商緩存 + LocalStorage
離線應(yīng)用Service Worker + IndexedDB
高頻數(shù)據(jù)訪問內(nèi)存緩存(如 Map 對象)、vuex、pina
用戶會(huì)話信息SessionStorage

總結(jié)

到此這篇關(guān)于前端緩存策略及其應(yīng)用場景詳解的文章就介紹到這了,更多相關(guān)前端緩存策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中的幾種內(nèi)置數(shù)據(jù)結(jié)構(gòu)

    JavaScript中的幾種內(nèi)置數(shù)據(jù)結(jié)構(gòu)

    本文介紹了JavaScript中的幾種內(nèi)置數(shù)據(jù)結(jié)構(gòu),包括Array、Set、Map和Object,以及它們的特點(diǎn)和適用場景,通過比較這些數(shù)據(jù)結(jié)構(gòu)的性能和特性,幫助開發(fā)者根據(jù)具體需求選擇最合適的結(jié)構(gòu),感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • 用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • JavaScript實(shí)現(xiàn)公歷轉(zhuǎn)農(nóng)歷功能示例

    JavaScript實(shí)現(xiàn)公歷轉(zhuǎn)農(nóng)歷功能示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)公歷轉(zhuǎn)農(nóng)歷功能,涉及javascript日期與時(shí)間相關(guān)操作及運(yùn)算操作技巧,需要的朋友可以參考下
    2017-02-02
  • 自定義javascript驗(yàn)證框架示例【附源碼下載】

    自定義javascript驗(yàn)證框架示例【附源碼下載】

    這篇文章主要介紹了自定義javascript驗(yàn)證框架,結(jié)合實(shí)例形式分析了javascript正則驗(yàn)證相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2019-05-05
  • javascript超過容器后顯示省略號(hào)效果的方法(兼容一行或者多行)

    javascript超過容器后顯示省略號(hào)效果的方法(兼容一行或者多行)

    下面小編就為大家?guī)硪黄猨avascript超過容器后顯示省略號(hào)效果的方法(兼容一行或者多行)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 手把手教你實(shí)現(xiàn)一個(gè)JavaScript時(shí)間軸組件

    手把手教你實(shí)現(xiàn)一個(gè)JavaScript時(shí)間軸組件

    本文主要是給大家?guī)硪粋€(gè)時(shí)間軸的組件開發(fā)教程,其主要功能就是可以拖動(dòng)時(shí)間軸來定位當(dāng)前時(shí)間,可以通過鼠標(biāo)滾輪來修改當(dāng)前時(shí)間分辨率,需要的可以參考一下
    2022-10-10
  • js動(dòng)畫(animate)簡單引擎代碼示例

    js動(dòng)畫(animate)簡單引擎代碼示例

    仿照flash的動(dòng)畫原理,自己寫了一個(gè)非常簡單的js動(dòng)畫引擎。
    2012-12-12
  • javascript父子頁面通訊實(shí)例詳解

    javascript父子頁面通訊實(shí)例詳解

    這篇文章主要介紹了javascript父子頁面通訊的實(shí)現(xiàn)方法,實(shí)例分析了javascript針對父子頁面通訊的原理與相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • JavaScript圖像延遲加載庫Echo.js

    JavaScript圖像延遲加載庫Echo.js

    Echo 是一個(gè)獨(dú)立的 JavaScript 懶加載圖像的工具,快速、體積?。ú蛔?k)和使用 HTML5 的 data- 屬性,通過本文給大家介紹JavaScript圖像延遲加載庫Echo.js ,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • JavaScript訂單操作小程序完整版

    JavaScript訂單操作小程序完整版

    這篇文章主要介紹了JavaScript訂單操作小程序完整版,增加訂單,刪除訂單,修改訂單數(shù)量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論

肇庆市| 泽库县| 乐至县| 宝鸡市| 宜都市| 佛冈县| 灌阳县| 北京市| 镇远县| 唐山市| 昔阳县| 城市| 桃园县| 吴桥县| 南和县| 阿尔山市| 辽阳市| 泾川县| 平罗县| 大悟县| 页游| 临澧县| 江阴市| 陈巴尔虎旗| 禹州市| 芷江| 宜昌市| 中卫市| 建瓯市| 霍林郭勒市| 天全县| 临西县| 虹口区| 策勒县| 鄂托克前旗| 沁源县| 湖北省| 红原县| 龙江县| 麻城市| 贵港市|