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

การกำหนดข้อจำกัดในแคชเกี่ยวกับระยะเวลาที่ควรอนุญาตให้จัดเก็บรายการในแคชหรือจำนวนรายการที่ควรเก็บไว้ในแคชนั้นเป็นเรื่องปกติ 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 ได้

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

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

    โมฆะ

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

    ฟังก์ชัน constructor มีรูปแบบดังนี้

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

    • cacheName

      สตริง

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

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

      CacheExpirationConfig ไม่บังคับ

  • ลบ

    โมฆะ

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

    ฟังก์ชัน delete มีรูปแบบดังนี้

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    โมฆะ

    ลบรายการในแคชและเกณฑ์ที่ระบุ

    ฟังก์ชัน expireEntries มีรูปแบบดังนี้

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    โมฆะ

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

    ซึ่งต้องค้นหาจาก IndexedDB จึงอาจทําให้ช้า

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

    ฟังก์ชัน isURLExpired มีรูปแบบดังนี้

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

    • URL

      สตริง

    • returns

      Promise<boolean>

  • updateTimestamp

    โมฆะ

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

    ฟังก์ชัน updateTimestamp มีรูปแบบดังนี้

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

    • URL

      สตริง

    • returns

      Promise<void>

ExpirationPlugin

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

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

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

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

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

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

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

    โมฆะ

    ฟังก์ชัน constructor มีรูปแบบดังนี้

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

  • deleteCacheAndMetadata

    โมฆะ

    นี่เป็นเมธอดตัวช่วยที่ดําเนินการ 2 อย่าง ได้แก่

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

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

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

    ฟังก์ชัน deleteCacheAndMetadata มีรูปแบบดังนี้

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

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

  • matchOptions

    CacheQueryOptions ไม่บังคับ

  • maxAgeSeconds

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

  • maxEntries

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

  • purgeOnQuotaError

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