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