การหมดอายุของกล่องงาน

เป็นเรื่องปกติที่จะใช้ข้อจำกัดในแคชในแง่ของระยะเวลาอนุญาตให้จัดเก็บรายการในแคชหรือจำนวนรายการที่ควรเก็บไว้ในแคช Workbox มีฟังก์ชันการทำงานนี้ผ่านปลั๊กอิน workbox-expiration ซึ่งช่วยให้คุณจำกัดจำนวนรายการในแคชและ / หรือนำรายการที่แคชไว้เป็นระยะเวลานานออกได้

จำกัดจำนวนรายการแคช

หากต้องการจำกัดจำนวนรายการที่จัดเก็บในแคช ให้ใช้ตัวเลือก maxEntries ดังนี้

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxEntries: 20,
      }),
    ],
  })
);

ด้วยวิธีนี้ ปลั๊กอิน จะถูกเพิ่มลงในเส้นทางนี้ หลังจากใช้การตอบกลับที่แคชไว้หรือมีการเพิ่มคำขอใหม่ลงในแคช ปลั๊กอินจะดูแคชที่กําหนดค่าไว้ และตรวจสอบว่าจำนวนรายการที่แคชไม่เกินขีดจำกัด หากมี ระบบจะนำรายการที่เก่าที่สุดออก

จำกัดอายุของรายการแคช

หากต้องการจำกัดระยะเวลาในการแคชคำขอ คุณจะกำหนดอายุสูงสุดเป็นวินาทีได้โดยใช้ตัวเลือก maxAgeSeconds ดังนี้

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxAgeSeconds: 24 * 60 * 60,
      }),
    ],
  })
);

ปลั๊กอินจะตรวจสอบและนำรายการออกหลังจากการอัปเดตคำขอหรือแคชแต่ละครั้ง

การใช้งานขั้นสูง

หากคุณต้องการใช้ตรรกะการหมดอายุแยกจากโมดูล Workbox อื่นๆ คุณจะทำในคลาส CacheExpiration ได้

หากต้องการใช้ข้อจำกัดกับแคช คุณจะต้องสร้างอินสแตนซ์ของ CacheExpiration สำหรับแคชที่ต้องการควบคุม ดังนี้

import {CacheExpiration} from 'workbox-expiration';

const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
  maxAgeSeconds: 24 * 60 * 60,
  maxEntries: 20,
});

เมื่อใดก็ตามที่คุณอัปเดตรายการที่แคช คุณต้องเรียกใช้เมธอด updateTimestamp() เพื่ออัปเดตอายุ

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

จากนั้นเมื่อใดก็ตามที่คุณต้องการให้ชุดรายการหมดอายุ ให้เรียกใช้เมธอด expireEntries() ซึ่งจะบังคับใช้การกําหนดค่า maxAgeSeconds และ maxEntries

await expirationManager.expireEntries();

ประเภท

CacheExpiration

คลาส CacheExpiration ช่วยให้คุณกำหนดวันหมดอายุและ / หรือขีดจำกัดจำนวนคำตอบที่จัดเก็บไว้ใน Cache

พร็อพเพอร์ตี้

  • เครื่องมือสร้าง

    void

    หากต้องการสร้างอินสแตนซ์ CacheExpiration ใหม่ คุณต้องระบุพร็อพเพอร์ตี้ config อย่างน้อย 1 รายการ

    ฟังก์ชัน constructor มีลักษณะดังนี้

    (cacheName: string,config?: CacheExpirationConfig)=> {...}

    • cacheName

      string

      ชื่อแคชที่จะใช้ข้อจำกัด

    • การกำหนดค่า

      CacheExpirationConfig ไม่บังคับ

  • ลบ

    void

    นำที่เก็บออบเจ็กต์ IndexedDB ที่ใช้เพื่อติดตามข้อมูลเมตาการหมดอายุของแคชออก

    ฟังก์ชัน delete มีลักษณะดังนี้

    ()=> {...}

    • returns

      Promise<void>

  • expireEntries

    void

    รายการหมดอายุสำหรับแคชที่ระบุและเกณฑ์ที่กำหนด

    ฟังก์ชัน expireEntries มีลักษณะดังนี้

    ()=> {...}

    • returns

      Promise<void>

  • isURLExpired

    void

    ใช้ตรวจสอบได้ว่า URL หมดอายุหรือไม่ก่อนที่จะใช้งาน

    การดำเนินการนี้จำเป็นต้องค้นหาจาก IndexedDB ดังนั้นจึงทำได้ช้า

    หมายเหตุ: วิธีนี้จะไม่ลบรายการที่แคชไว้ การเรียกใช้ expireEntries() เพื่อนำรายการ CacheDB และ Cache ออก

    ฟังก์ชัน isURLExpired มีลักษณะดังนี้

    (url: string)=> {...}

    • url

      string

    • returns

      Promise<boolean>

  • updateTimestamp

    void

    อัปเดตการประทับเวลาของ URL ที่ระบุ ซึ่งทำให้มั่นใจว่าเวลาที่นำรายการออกตามรายการสูงสุด ที่ใช้ล่าสุดนั้นถูกต้อง หรือเมื่อหมดอายุ การประทับเวลาเป็นข้อมูลล่าสุด

    ฟังก์ชัน updateTimestamp มีลักษณะดังนี้

    (url: string)=> {...}

    • url

      string

    • returns

      Promise<void>

ExpirationPlugin

ปลั๊กอินนี้สามารถใช้ใน workbox-strategy เพื่อบังคับใช้ขีดจำกัดอายุและ / หรือจำนวนคำขอที่แคชไว้อย่างสม่ำเสมอ

ซึ่งใช้ได้กับอินสแตนซ์ workbox-strategy ที่มีชุดพร็อพเพอร์ตี้ cacheName ที่กำหนดเองเท่านั้น กล่าวคือ จะไม่สามารถใช้การกำหนดให้รายการหมดอายุในกลยุทธ์ที่ใช้ชื่อแคชรันไทม์เริ่มต้นได้

เมื่อใดก็ตามที่มีการใช้หรืออัปเดตคำตอบที่แคชไว้ ปลั๊กอินนี้จะดูแคชที่เชื่อมโยงไว้และนำคำตอบเก่าหรือคำตอบที่เกินมาออก

เมื่อใช้ maxAgeSeconds ระบบอาจใช้การตอบกลับครั้งเดียวหลังจากหมดอายุ เนื่องจากการล้างเวลาหมดอายุจะไม่เกิดขึ้นจนกว่าจะหลังมีการใช้การตอบกลับที่แคชไว้ หากการตอบกลับมีส่วนหัว "วันที่" จะมีการตรวจสอบวันหมดอายุที่มีน้ำหนักเล็กน้อยและจะไม่ได้ใช้การตอบกลับโดยทันที

เมื่อใช้ maxEntries ระบบจะนำรายการที่ขอล่าสุดน้อยที่สุดออกจากแคชก่อน

พร็อพเพอร์ตี้

  • เครื่องมือสร้าง

    void

    ฟังก์ชัน constructor มีลักษณะดังนี้

    (config?: ExpirationPluginOptions)=> {...}

  • deleteCacheAndMetadata

    void

    ซึ่งเป็นเมธอดตัวช่วยในการดำเนินการ 2 อย่าง

    • ลบอินสแตนซ์ Cache ทั้งหมดที่เชื่อมโยงกับอินสแตนซ์ปลั๊กอินนี้ โดยเรียก caches.delete() ในนามของคุณ
    • ลบข้อมูลเมตาออกจาก IndexedDB ที่ใช้เพื่อติดตามรายละเอียดการหมดอายุของอินสแตนซ์ Cache แต่ละรายการ

    เมื่อใช้การหมดอายุของแคช การเรียกใช้เมธอดนี้เหมาะกว่าการเรียกใช้ caches.delete() โดยตรง เนื่องจากวิธีนี้ช่วยให้ระบบนำข้อมูลเมตา IndexedDB ออกทั้งหมด ตลอดจนลบอินสแตนซ์ IndexedDB แบบเปิด

    โปรดทราบว่าหากคุณไม่ได้ใช้การหมดอายุของแคชสำหรับแคชที่ระบุ การเรียกใช้ caches.delete() และการส่งในชื่อแคชก็น่าจะเพียงพอแล้ว ไม่มีวิธีการเฉพาะ Workbox ที่จำเป็นสำหรับการล้างข้อมูลในกรณีนั้น

    ฟังก์ชัน deleteCacheAndMetadata มีลักษณะดังนี้

    ()=> {...}

    • returns

      Promise<void>

ExpirationPluginOptions

พร็อพเพอร์ตี้

  • matchOptions

    CacheQueryOptions ไม่บังคับ

  • maxAgeSeconds

    ตัวเลข ไม่บังคับ

  • maxEntries

    ตัวเลข ไม่บังคับ

  • purgeOnQuotaError

    บูลีน ไม่บังคับ