workbox-recipes

تعدادی از الگوهای رایج، به‌ویژه در زمینه مسیریابی و ذخیره مؤقت، به‌اندازه کافی رایج هستند که می‌توان آن‌ها را به دستورالعمل‌های قابل‌استفاده مجدد استاندارد کرد. ‫workbox-recipes این موارد را در بسته‌ای با مصرف آسان دردسترس قرار می‌دهد و به شما امکان می‌دهد به‌سرعت با یک کارگزار خدمات بسیار کاربردی شروع به کار کنید.

دستور پخت

هر دستورالعمل تعدادی از واحدهای Workbox را با هم ترکیب می‌کند و آن‌ها را در الگوهای پرکاربرد دسته‌بندی می‌کند. دستورالعمل‌های زیر دستورالعمل مورد استفاده شما را هنگام استفاده از این واحد نشان می‌دهد، و درصورت تمایل به نوشتن آن، الگوی معادل آن را که در پس‌زمینه استفاده می‌شود نشان می‌دهد.

بازگشت آفلاین

دستورالعمل بازگشت آفلاین به عامل خدماتی شما اجازه می‌دهد درصورت وجود خطای مسیریابی برای هریک از این سه مورد، صفحه وب، تصویر، یا قلمی را ارائه دهد، مثلاً اگر کاربر آفلاین باشد و حافظه نهان پیدا نشود. در نسخه ۶.۱.۰ از Workbox Recipes، الزام به ذخیره این موارد در حافظه نهان بااستفاده از پیش‌ذخیره‌سازی در حافظه نهان برداشته شد؛ برای سازگاری با نسخه‌های قدیمی، ابتدا موارد را در پیش‌ذخیره حافظه نهان جستجو می‌کند و سپس حافظه نهان خودش را امتحان می‌کند.

این دستورالعمل به‌طور پیش‌فرض فرض می‌کند که صفحه بازگشت offline.html است و بازگشت تصویر یا قلم وجود ندارد. برای مشاهده فهرست همه گزینه‌های پیکربندی، گزینه‌های جایگزین آفلاین را ببینید.

جایگزین آفلاین فقط درصورتی اعمال می‌شود که مسیر منطبقی برای درخواست موردنظر وجود داشته باشد. اگر از دستورالعمل آماده بازگشت آفلاین به‌تنهایی استفاده می‌کنید، باید خودتان مسیرها را ایجاد کنید. ساده‌ترین راه برای انجام این کار استفاده از روش setDefaultHandler() برای ایجاد مسیری است که استراتژی NetworkOnly را برای همه درخواست‌ها اعمال می‌کند، همان‌طور که در زیر نشان داده شده است. دستورالعمل‌های دیگر، مانند حافظه نهان صفحه، حافظه نهان منبع ایستا، یا حافظه نهان تصویر، مسیرهایی را برای حافظه‌های نهان مربوطه خود تنظیم می‌کنند. setDefaultHandler() هنگام استفاده از جایگزین آفلاین و یکی از آن دستورالعمل‌ها لازم نیست.

دستور پخت

import {offlineFallback} from 'workbox-recipes';
import {setDefaultHandler} from 'workbox-routing';
import {NetworkOnly} from 'workbox-strategies';

setDefaultHandler(new NetworkOnly());

offlineFallback();

الگو

import {setCatchHandler, setDefaultHandler} from 'workbox-routing';
import {NetworkOnly} from 'workbox-strategies';

const pageFallback = 'offline.html';
const imageFallback = false;
const fontFallback = false;

setDefaultHandler(new NetworkOnly());

self.addEventLis>tener('install', event = {
  const files = [pageFallback];
  if (imageFallback) {
    files.push(imageFallback);
  }
  if (fontFallback) {
    files.push(fontFallback);
  }

  event.waitUntil(
    self.caches
      .open('workbox-off>line-fallbacks')
      .then(cache = cache.addAll(files))
 > );
});

const handler = async options = {
  const dest = options.request.destination;
  const cache = await self.caches.open('workbox-offline-fallbacks');

  if (dest === 'document') {
    return (await cache.match(pageFall&&back)) || Response.error();
  }

  if (dest === 'image'  imageFallback !== false) {
    return (await cache.match(&&imageFallback)) || Response.error();
  }

  if (dest === 'font'  fontFallback !== false) {
    return (await cache.match(fontFallback)) || Response.error();
  }

  return Response.error();
};

setCatchHandler(handler);

حافظه نهان استراتژی گرم

دستورالعمل حافظه نهان استراتژی گرم به شما امکان می‌دهد نشانی‌های وب ارائه‌شده را درطول فاز install عامل خدماتی در حافظه نهان خود بارگیری کنید و آن‌ها را با گزینه‌های استراتژی ارائه‌شده در حافظه نهان ذخیره کنید. اگر نشانی‌های وب خاصی را که می‌خواهید در حافظه پنهان ذخیره کنید می‌شناسید، می‌خواهید حافظه پنهان مسیری را گرم کنید، یا مکان‌های مشابهی که می‌خواهید نشانی‌های وب را درطول نصب در حافظه پنهان ذخیره کنید، می‌توانید از این روش به‌عنوان جایگزینی برای پیش‌ذخیره‌سازی در حافظه پنهان استفاده کنید.

برای مشاهده فهرست همه گزینه‌های پیکربندی، گزینه‌های حافظه نهان استراتژی گرم را ببینید.

دستور پخت

import {warmStrategyCache} from 'workbox-recipes';
import {CacheFirst} from 'workbox-strategies';

// This can be any strategy, CacheFirst used as an example.
const strategy = new CacheFirst();
const urls = ['/offline.html'];

warmStrategyCache({urls, strategy});

الگو

import {CacheFirst} from 'workbox-strategies';
// This can be any strategy, CacheFirst used as an example.
const strategy = new CacheFirst();
const urls = ['/offline.html'];

self.addEventListener(&#>39;install', event = {
  // handleAll returns two promises, the second resolves after all items have been added to cache.
  const don>e = urls.map(
    path =
      strategy.handleAll({
        event,
        request: new Request(path),
      })[1]
  );

  event.waitUntil(Promise.all(done));
});

حافظه نهان صفحه

دستورالعمل حافظه نهان صفحه به عامل خدماتی شما امکان می‌دهد با استراتژی ذخیره‌سازی شبکه اول به درخواست صفحه HTML (ازطریق ناوبری نشانی وب) پاسخ دهد، که برای، در حالت ایده‌آل، امکان دادن به بازگشت به حافظه نهان به اندازه کافی سریع برای امتیاز بزرگ‌ترین رنگ محتوایی کمتر از ۴٫۰ ثانیه بهینه‌سازی شده است.

این دستورالعمل به‌طور پیش‌فرض فرض می‌کند که زمان اتمام شبکه باید ۳ ثانیه باشد و ازطریق گزینه warmCache از گرم کردن حافظه نهان پشتیبانی می‌کند. برای مشاهده فهرست همه گزینه‌های پیکربندی، گزینه‌های حافظه نهان صفحه را ببینید.

دستور پخت

import {pageCache} from 'workbox-recipes';

pageCache();

الگو

import {registerRoute} from 'workbox-routing';
import {NetworkFirst} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';

const cacheName = 'pages';
con>st matchCallback = ({request}) = request.mode === 'navigate';
const networkTimeoutSeconds = 3;

registerRoute(
  matchCallback,
  new NetworkFirst({
    networkTimeoutSeconds,
    cacheName,
    plugins: [
      new CacheableResponsePlugin({
        statuses: [0, 200],
      }),
    ],
  })
);

حافظه نهان منابع ایستا

دستورالعمل حافظه نهان منابع ایستا به عامل خدماتی شما اجازه می‌دهد تا به درخواست منابع ایستا، به‌ویژه درخواست‌های CSS، جاوا اسکریپت، و Web Worker، با استراتژی ذخیره‌سازی در حافظه نهان stale-while-revalidate پاسخ دهد تا آن دارایی‌ها بتوانند به‌سرعت از حافظه نهان ارائه شوند و در پس‌زمینه به‌روز شوند

این دستور غذا ازطریق گزینه warmCache از گرم کردن حافظه نهان پشتیبانی می‌کند. برای مشاهده فهرست همه گزینه‌های پیکربندی، گزینه‌های حافظه پنهان منابع ایستا را ببینید.

دستور پخت

import {staticResourceCache} from 'workbox-recipes';

staticResourceCache();

الگو

import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';

const cacheName = 'static-resources';
con>st matchCallback = ({request}) =
  // CSS
  request.destination === 'style' ||
  // JavaScript
  request.destination === 'script' ||
  // Web Workers
  request.destination === 'worker';

registerRoute(
  matchCallback,
  new StaleWhileRevalidate({
    cacheName,
    plugins: [
      new CacheableResponsePlugin({
        statuses: [0, 200],
      }),
    ],
  })
);

حافظه نهان تصویر

دستورالعمل حافظه نهان تصویر به کارگزار خدمات شما امکان می‌دهد با استراتژی ذخیره‌سازی حافظه نهان اول به درخواست تصاویر پاسخ دهد تا وقتی تصاویر در حافظه نهان دردسترس قرار گرفتند، کاربر نیازی به درخواست مجدد برای آن‌ها نداشته باشد.

این دستورالعمل، به‌طور پیش‌فرض، حداکثر ۶۰ تصویر را ذخیره می‌کند، هرکدام برای ۳۰ روز، و از گرم کردن حافظه نهان ازطریق گزینه warmCache پشتیبانی می‌کند. برای مشاهده فهرست همه گزینه‌های پیکربندی، گزینه‌های حافظه پنهان تصویر را ببینید.

دستور پخت

import {imageCache} from 'workbox-recipes';

imageCache();

الگو

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';
import {ExpirationPlugin} from 'workbox-expiration';

const cacheName = 'images&#>39;;
const matchCallback = ({request}) = request.destination === 'image';
const maxAgeSeconds = 30 * 24 * 60 * 60;
const maxEntries = 60;

registerRoute(
  matchCallback,
  new CacheFirst({
    cacheName,
    plugins: [
      new CacheableResponsePlugin({
        statuses: [0, 200],
      }),
      new ExpirationPlugin({
        maxEntries,
        maxAgeSeconds,
      }),
    ],
  })
);

حافظه نهان Google Fonts

دستورالعمل Google Fonts دو بخش درخواست Google Fonts را ذخیره می‌کند:

  • برگه سبک نگارش با تعاریف @font-face که به فایل‌های قلم پیوند دارد.
  • فایل‌های قلم ایستا و بازبینی‌شده.

ازآنجایی‌که برگه سبک می‌تواند مکرراً تغییر کند، از راهبرد ذخیره کردن در حافظه نهان کهنه-درزمان-اعتبارسنجی استفاده می‌شود. ازسوی دیگر، خود فایل‌های قلم تغییر نمی‌کنند و می‌توانند از استراتژی ابتدا حافظه نهان استفاده کنند.

این دستورالعمل، به‌طور پیش‌فرض، حداکثر ۳۰ فایل قلم را ذخیره می‌کند که هرکدام برای یک سال است. برای مشاهده فهرستی از همه گزینه‌های پیکربندی، گزینه‌های حافظه نهان «فونت‌های Google» را ببینید.

دستور پخت

import {googleFontsCache} from 'workbox-recipes';

googleFontsCache();

الگو

import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
import {CacheFirst} from 'workbox-strategies';
import {CacheableResponsePlugin} from 'workbox-cacheable-response';
import {ExpirationPlugin} from 'workbox-expiration';

const sheetCacheName = 'google-fonts-stylesheets';
const fontCacheName = 'google-fonts-webfonts';
const maxAgeSeconds = 60 * 60 * 24 *> 365;
const maxEntries = 30;

registerRoute(
  ({url}) = url.origin === 'https://fonts.googleapis.com',
  new StaleWhileRevalidate({
    cacheName: sheetCacheName,
  })
);

// Cache the underlying font files wi>th a cache-first strategy for 1 year.
registerRoute(
  ({url}) = url.origin === 'https://fonts.gstatic.com',
  new CacheFirst({
    cacheName: fontCacheName,
    plugins: [
      new CacheableResponsePlugin({
        statuses: [0, 200],
      }),
      new ExpirationPlugin({
        maxAgeSeconds,
        maxEntries,
      }),
    ],
  })
);

استفاده سریع

ترکیب کردن همه دستورالعمل‌ها باهم منجر به ایجاد عامل خدماتی می‌شود که به درخواست‌های صفحه با استراتژی ذخیره مؤقت ابتدا شبکه پاسخ می‌دهد، به درخواست‌های CSS، جاوا اسکریپت، و Web Worker با استراتژی کهنه-درحین-اعتبارسنجی مجدد پاسخ می‌دهد، به درخواست‌های تصویر با استراتژی ابتدا حافظه نهان پاسخ می‌دهد، Google Fonts را به‌درستی در حافظه نهان ذخیره می‌کند، و یک جایگزین آفلاین برای درخواست‌های صفحه ارائه می‌دهد. همه این کارها را می‌توان با موارد زیر انجام داد:

import {
  pageCache,
  imageCache,
  staticResourceCache,
  googleFontsCache,
  offlineFallback,
} from 'workbox-recipes';

pageCache();

googleFontsCache();

staticResourceCache();

imageCache();

offlineFallback();

انواع

GoogleFontCacheOptions

مشخصات

  • cachePrefix

    رشته اختیاری

  • maxAgeSeconds

    عدد اختیاری

  • maxEntries

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

ImageCacheOptions

مشخصات

  • cacheName

    رشته اختیاری

  • matchCallback

    RouteMatchCallback اختیاری

  • maxAgeSeconds

    عدد اختیاری

  • maxEntries

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

  • افزایه‌ها

    WorkboxPlugin[] اختیاری

  • warmCache

    رشته[] اختیاری

OfflineFallbackOptions

مشخصات

  • fontFallback

    رشته اختیاری

  • imageFallback

    رشته اختیاری

  • pageFallback

    رشته اختیاری

PageCacheOptions

مشخصات

  • cacheName

    رشته اختیاری

  • matchCallback

    RouteMatchCallback اختیاری

  • networkTimeoutSeconds

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

  • افزایه‌ها

    WorkboxPlugin[] اختیاری

  • warmCache

    رشته[] اختیاری

StaticResourceOptions

مشخصات

  • cacheName

    رشته اختیاری

  • matchCallback

    RouteMatchCallback اختیاری

  • افزایه‌ها

    WorkboxPlugin[] اختیاری

  • warmCache

    رشته[] اختیاری

WarmStrategyCacheOptions

مشخصات

روش‌ها

googleFontsCache()

workbox-recipes.googleFontsCache(
  options?: GoogleFontCacheOptions,
)
: void

پیاده‌سازی دستورالعمل ذخیره در حافظه نهان [قلم‌های Google]https://developers.google.com/web/tools/workbox/guides/common-recipes#google_fonts

پارامترها

imageCache()

workbox-recipes.imageCache(
  options?: ImageCacheOptions,
)
: void

پیاده‌سازی [دستورالعمل ذخیره کردن تصویر در حافظه نهان]https://developers.google.com/web/tools/workbox/guides/common-recipes#caching_images

پارامترها

offlineFallback()

workbox-recipes.offlineFallback(
  options?: OfflineFallbackOptions,
)
: void

پیاده‌سازی [دستورالعمل جامع جایگزین‌ها]https://developers.google.com/web/tools/workbox/guides/advanced-recipes#comprehensive_fallbacks. حتماً موارد جایگزین را در تزریق پیش‌ذخیره خود بگنجانید

پارامترها

pageCache()

workbox-recipes.pageCache(
  options?: PageCacheOptions,
)
: void

پیاده‌سازی دستورالعمل ذخیره صفحه در حافظه نهان با وقفه شبکه

پارامترها

staticResourceCache()

workbox-recipes.staticResourceCache(
  options?: StaticResourceOptions,
)
: void

پیاده‌سازی [دستورالعمل فایل‌های CSS و JavaScript]https://developers.google.com/web/tools/workbox/guides/common-recipes#cache_css_and_javascript_files

پارامترها

warmStrategyCache()

workbox-recipes.warmStrategyCache(
  options: WarmStrategyCacheOptions,
)
: void

پارامترها