جعبه کار - انقضا

این نسبتاً معمول است که بخواهیم برای یک کش محدودیت هایی از نظر مدت زمانی که باید به موارد در کش ذخیره شوند یا تعداد آیتم هایی که باید در حافظه پنهان نگهداری شوند، اعمال کنیم. 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) => {...}

  • حذف CacheAndMetadata

    خالی

    این یک روش کمکی است که دو عملیات را انجام می دهد:

    • با فراخوانی ()caches.delete از طرف شما، تمام نمونه‌های Cache مرتبط با این نمونه پلاگین را حذف می‌کند.
    • ابرداده را از IndexedDB که برای پیگیری جزئیات انقضا برای هر نمونه کش استفاده می شود، حذف می کند.

    هنگام استفاده از انقضای حافظه پنهان، فراخوانی این روش به فراخوانی مستقیم caches.delete() ترجیح داده می‌شود، زیرا این کار تضمین می‌کند که ابرداده‌های IndexedDB نیز کاملاً حذف شده و نمونه‌های باز IndexedDB حذف می‌شوند.

    توجه داشته باشید که اگر از انقضای کش برای یک کش معین استفاده نمی کنید، فراخوانی caches.delete() و ارسال نام کش کافی است. در این مورد هیچ روش مخصوص Workbox برای پاکسازی مورد نیاز نیست.

    تابع deleteCacheAndMetadata به نظر می رسد:

    () => {...}

    • برمی گرداند

      قول<باطل>

ExpirationPluginOptions

خواص

  • matchOptions

    CacheQueryOptions اختیاری است

  • maxAgeSeconds

    شماره اختیاری

  • maxEntries

    شماره اختیاری

  • purgeOnQuotaError

    بولی اختیاری

،

این نسبتاً معمول است که بخواهیم برای یک کش محدودیت هایی از نظر مدت زمانی که باید به موارد در کش ذخیره شوند یا تعداد آیتم هایی که باید در حافظه پنهان نگهداری شوند، اعمال کنیم. 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>

  • به روز رسانی زمان مهر

    خالی

    مهر زمانی را برای URL داده شده به روز کنید. این تضمین می‌کند که هنگام حذف ورودی‌ها بر اساس حداکثر ورودی‌هایی که اخیراً استفاده شده دقیق است یا در هنگام انقضا، مهر زمانی به‌روز است.

    تابع updateTimestamp به نظر می رسد:

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

    • آدرس اینترنتی

      رشته

    • برمی گرداند

      قول<باطل>

ExpirationPlugin

این افزونه را می توان در یک workbox-strategy استفاده کرد تا به طور منظم محدودیتی در سن و / یا تعداد درخواست های ذخیره شده در حافظه پنهان اعمال کند.

فقط می‌تواند با نمونه‌های workbox-strategy که دارای مجموعه ویژگی cacheName سفارشی هستند استفاده شود. به عبارت دیگر، نمی توان از آن برای منقضی شدن ورودی های استراتژی که از نام کش زمان اجرا پیش فرض استفاده می کند استفاده کرد.

هر زمان که یک پاسخ ذخیره شده استفاده شود یا به روز شود، این افزونه به کش مرتبط نگاه می کند و هر پاسخ قدیمی یا اضافی را حذف می کند.

هنگام استفاده از maxAgeSeconds ، پاسخ ها ممکن است یک بار پس از انقضا استفاده شوند، زیرا پاکسازی انقضا تا زمانی که پاسخ ذخیره شده در حافظه پنهان استفاده نشده باشد، رخ نخواهد داد. اگر پاسخ دارای سرصفحه "تاریخ" باشد، بررسی انقضا وزن سبک انجام می شود و پاسخ بلافاصله استفاده نمی شود.

هنگام استفاده از maxEntries ، ورودی حداقل اخیراً درخواست شده ابتدا از حافظه پنهان حذف می شود.

خواص

  • سازنده

    خالی

    تابع constructor به نظر می رسد:

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

  • حذف CacheAndMetadata

    خالی

    این یک روش کمکی است که دو عملیات را انجام می دهد:

    • با فراخوانی ()caches.delete از طرف شما، تمام نمونه‌های Cache مرتبط با این نمونه پلاگین را حذف می‌کند.
    • ابرداده را از IndexedDB که برای پیگیری جزئیات انقضا برای هر نمونه کش استفاده می شود، حذف می کند.

    هنگام استفاده از انقضای حافظه پنهان، فراخوانی این روش به فراخوانی مستقیم caches.delete() ترجیح داده می‌شود، زیرا این کار تضمین می‌کند که ابرداده‌های IndexedDB نیز کاملاً حذف شده و نمونه‌های باز IndexedDB حذف می‌شوند.

    توجه داشته باشید که اگر از انقضای کش برای یک کش معین استفاده نمی کنید، فراخوانی caches.delete() و ارسال نام کش کافی است. در این مورد هیچ روش مخصوص Workbox برای پاکسازی مورد نیاز نیست.

    تابع deleteCacheAndMetadata به نظر می رسد:

    () => {...}

    • برمی گرداند

      قول<باطل>

ExpirationPluginOptions

خواص

  • matchOptions

    CacheQueryOptions اختیاری است

  • maxAgeSeconds

    شماره اختیاری

  • maxEntries

    شماره اختیاری

  • purgeOnQuotaError

    بولی اختیاری