การกำหนดข้อจำกัดในแคชเกี่ยวกับระยะเวลาที่ควรอนุญาตให้จัดเก็บรายการในแคชหรือจำนวนรายการที่ควรเก็บไว้ในแคชนั้นเป็นเรื่องปกติ 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 ไม่บังคับ
-
returns
-
-
ลบ
โมฆะ
นำที่เก็บออบเจ็กต์ 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) => {...}
-
การกำหนดค่า
ExpirationPluginOptions ไม่บังคับ
-
returns
-
-
deleteCacheAndMetadata
โมฆะ
นี่เป็นเมธอดตัวช่วยที่ดําเนินการ 2 อย่าง ได้แก่
- ลบอินสแตนซ์แคชที่เกี่ยวข้องทั้งหมดกับอินสแตนซ์ปลั๊กอินนี้โดยการเรียกใช้ caches.delete() ในนามของคุณ
- ลบข้อมูลเมตาจาก IndexedDB ที่ใช้ติดตามรายละเอียดการหมดอายุของอินสแตนซ์แคชแต่ละรายการ
เมื่อใช้การหมดอายุของแคช คุณควรเรียกใช้เมธอดนี้แทนการเรียกใช้
caches.delete()
โดยตรง เนื่องจากวิธีนี้จะช่วยให้มั่นใจได้ว่าระบบจะนำข้อมูลเมตา IndexedDB ออกอย่างเรียบร้อยและลบอินสแตนซ์ IndexedDB ที่เปิดอยู่ด้วยโปรดทราบว่าหากคุณไม่ได้ใช้การหมดอายุของแคชสําหรับแคชหนึ่งๆ การเรียกใช้
caches.delete()
และส่งชื่อแคชก็เพียงพอแล้ว ในกรณีนี้ คุณไม่จำเป็นต้องใช้วิธีการเฉพาะของ Workbox ในการล้างข้อมูลฟังก์ชัน
deleteCacheAndMetadata
มีรูปแบบดังนี้() => {...}
-
returns
Promise<void>
ExpirationPluginOptions
พร็อพเพอร์ตี้
-
matchOptions
CacheQueryOptions ไม่บังคับ
-
maxAgeSeconds
ตัวเลข ไม่บังคับ
-
maxEntries
ตัวเลข ไม่บังคับ
-
purgeOnQuotaError
บูลีน ไม่บังคับ