این نسبتاً معمول است که بخواهیم برای یک کش محدودیت هایی از نظر مدت زمانی که باید به موارد در کش ذخیره شوند یا تعداد آیتم هایی که باید در حافظه پنهان نگهداری شوند، اعمال کنیم. 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
را ارائه دهید.تابع
constructor
به صورت زیر است:(cacheName: string, config?: CacheExpirationConfig) => {...}
- cacheName
رشته
نام حافظه پنهان برای اعمال محدودیت.
- پیکربندی
CacheExpirationConfig اختیاری است
- برمی گرداند
- حذف کنید
باطل
ذخیره شی IndexedDB را که برای پیگیری فراداده انقضای حافظه پنهان استفاده می شود، حذف می کند.
تابع
delete
به نظر می رسد:() => {...}
- برمی گرداند
قول<باطل>
- ورودی های منقضی
باطل
ورودی های حافظه پنهان و معیارهای داده شده منقضی می شود.
تابع
expireEntries
به نظر می رسد:() => {...}
- برمی گرداند
قول<باطل>
- isURLE منقضی شده است
باطل
می توان از آن برای بررسی اینکه آیا URL قبل از استفاده منقضی شده است یا نه استفاده کرد.
این نیاز به بررسی از IndexedDB دارد، بنابراین می تواند کند باشد.
توجه: این روش ورودی کش را حذف نمی کند، برای حذف ورودی های indexedDB و Cache
expireEntries()
فراخوانی کنید.تابع
isURLExpired
به نظر می رسد:(url: string) => {...}
- آدرس اینترنتی
رشته
- برمی گرداند
وعده<boolean>
- updateTimestamp
باطل
مهر زمانی را برای URL داده شده به روز کنید. این تضمین میکند که هنگام حذف ورودیها بر اساس حداکثر ورودیهایی که اخیراً استفاده شده دقیق است یا در هنگام انقضا، مهر زمانی بهروز است.
تابع
updateTimestamp
به نظر می رسد:(url: string) => {...}
- آدرس اینترنتی
رشته
- برمی گرداند
قول<باطل>
ExpirationPlugin
این افزونه را می توان در یک workbox-strategy
استفاده کرد تا به طور منظم محدودیتی در سن و / یا تعداد درخواست های ذخیره شده در حافظه پنهان اعمال کند.
فقط میتواند با نمونههای workbox-strategy
که دارای مجموعه ویژگی cacheName
سفارشی هستند استفاده شود. به عبارت دیگر، نمی توان از آن برای منقضی شدن ورودی های استراتژی که از نام کش زمان اجرا پیش فرض استفاده می کند استفاده کرد.
هر زمان که یک پاسخ ذخیره شده استفاده شود یا به روز شود، این افزونه به کش مرتبط نگاه می کند و هر پاسخ قدیمی یا اضافی را حذف می کند.
هنگام استفاده از maxAgeSeconds
، پاسخ ها ممکن است یک بار پس از انقضا استفاده شوند، زیرا پاکسازی انقضا تا زمانی که پاسخ ذخیره شده در حافظه پنهان استفاده نشده باشد، رخ نخواهد داد. اگر پاسخ دارای سرصفحه "تاریخ" باشد، بررسی انقضا وزن سبک انجام می شود و پاسخ بلافاصله استفاده نمی شود.
هنگام استفاده از maxEntries
، ورودی حداقل اخیراً درخواست شده ابتدا از حافظه پنهان حذف می شود.
خواص
- سازنده
باطل
تابع
constructor
به صورت زیر است:(config?: ExpirationPluginOptions) => {...}
- پیکربندی
ExpirationPluginOptions اختیاری است
- برمی گرداند
- حذف CacheAndMetadata
باطل
این یک روش کمکی است که دو عملیات را انجام می دهد:
- با فراخوانی ()caches.delete از طرف شما، تمام نمونههای Cache مرتبط با این نمونه پلاگین را حذف میکند.
- ابرداده را از IndexedDB که برای پیگیری جزئیات انقضا برای هر نمونه کش استفاده می شود، حذف می کند.
هنگام استفاده از انقضای حافظه پنهان، فراخوانی این متد به فراخوانی مستقیم
caches.delete()
ترجیح داده میشود، زیرا این کار تضمین میکند که ابرداده IndexedDB نیز بهطور تمیز حذف شده و نمونههای باز IndexedDB حذف میشوند.توجه داشته باشید که اگر از انقضای کش برای یک کش معین استفاده نمی کنید، فراخوانی
caches.delete()
و ارسال نام کش کافی است. در این مورد هیچ روش مخصوص Workbox برای پاکسازی مورد نیاز نیست.تابع
deleteCacheAndMetadata
به نظر می رسد:() => {...}
- برمی گرداند
قول<باطل>
ExpirationPluginOptions
خواص
- matchOptions
CacheQueryOptions اختیاری است
- maxAgeSeconds
شماره اختیاری
- maxEntries
شماره اختیاری
- purgeOnQuotaError
بولی اختیاری