وقتی سرویس ورکرها برای اولین بار معرفی شدند، مجموعهای از استراتژیهای رایج ذخیرهسازی پدیدار شدند. استراتژی ذخیرهسازی الگویی است که تعیین میکند یک سرویس ورکرها چگونه پس از دریافت یک رویداد واکشی، پاسخی تولید کنند.
workbox-strategies رایجترین استراتژیهای ذخیرهسازی را ارائه میدهد، بنابراین اعمال آنها در service worker شما آسان است.
ما به جزئیات بیشتری خارج از استراتژیهای پشتیبانیشده توسط Workbox نمیپردازیم، اما میتوانید در کتاب آشپزی آفلاین اطلاعات بیشتری کسب کنید .
استفاده از استراتژیها
در مثالهای زیر، نحوه استفاده از استراتژیهای ذخیرهسازی Workbox با workbox-routing را به شما نشان خواهیم داد. گزینههایی وجود دارد که میتوانید با هر استراتژی تعریف کنید که در بخش پیکربندی استراتژیها در این سند پوشش داده شدهاند.
در بخش استفاده پیشرفته ، نحوه استفاده مستقیم از استراتژیهای ذخیرهسازی بدون استفاده از workbox-routing را پوشش خواهیم داد.
اعتبارسنجی مجدد در حین بیاعتبارسازی

الگوی stale-while-revalidate به شما این امکان را میدهد که در صورت وجود، در اسرع وقت با یک پاسخ ذخیره شده در حافظه پنهان به درخواست پاسخ دهید و در صورت عدم ذخیره شدن درخواست در حافظه پنهان، به درخواست شبکه مراجعه کنید. سپس از درخواست شبکه برای بهروزرسانی حافظه پنهان استفاده میشود. برخلاف برخی از پیادهسازیهای stale-while-revalidate، این استراتژی صرف نظر از قدمت پاسخ ذخیره شده، همیشه یک درخواست اعتبارسنجی مجدد ایجاد میکند.
این یک استراتژی نسبتاً رایج است که در آن داشتن بهروزترین منبع برای برنامه حیاتی نیست.
import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
registerRoute(
({url}) => url.pathname.startsWith('/images/avatars/'),
new StaleWhileRevalidate()
);
حافظه پنهان اول (حافظه پنهان به شبکه برمیگردد)

برنامههای وب آفلاین به شدت به حافظه پنهان متکی هستند، اما برای دادههایی که غیرحیاتی هستند و میتوانند به تدریج ذخیره شوند، ابتدا حافظه پنهان بهترین گزینه است.
اگر پاسخی در حافظه پنهان وجود داشته باشد، درخواست با استفاده از پاسخ ذخیره شده در حافظه پنهان انجام میشود و شبکه به هیچ وجه مورد استفاده قرار نمیگیرد. اگر پاسخی در حافظه پنهان وجود نداشته باشد، درخواست با یک درخواست شبکه انجام میشود و پاسخ ذخیره میشود تا درخواست بعدی مستقیماً از حافظه پنهان ارائه شود.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
registerRoute(({request}) => request.destination === 'style', new CacheFirst());
شبکه اول (شبکه به حافظه پنهان بازمیگردد)

برای درخواستهایی که مرتباً بهروزرسانی میشوند، استراتژی اولویت شبکه راهحل ایدهآلی است. بهطور پیشفرض، سعی میکند آخرین پاسخ را از شبکه دریافت کند. اگر درخواست موفقیتآمیز باشد، پاسخ را در حافظه پنهان قرار میدهد. اگر شبکه نتواند پاسخی را برگرداند، از پاسخ ذخیرهشده در حافظه پنهان استفاده میشود.
import {registerRoute} from 'workbox-routing';
import {NetworkFirst} from 'workbox-strategies';
registerRoute(
({url}) => url.pathname.startsWith('/social-timeline/'),
new NetworkFirst()
);
فقط شبکه

اگر نیاز دارید درخواستهای خاصی از شبکه انجام شود، فقط شبکه راهکاری است که باید استفاده کنید.
import {registerRoute} from 'workbox-routing';
import {NetworkOnly} from 'workbox-strategies';
registerRoute(({url}) => url.pathname.startsWith('/admin/'), new NetworkOnly());
فقط حافظه پنهان

استراتژی فقط کش تضمین میکند که پاسخها از یک کش دریافت میشوند. این مورد در workbox کمتر رایج است، اما اگر مرحله precaching مخصوص به خودتان را داشته باشید، میتواند مفید باشد.
import {registerRoute} from 'workbox-routing';
import {CacheOnly} from 'workbox-strategies';
registerRoute(({url}) => url.pathname.startsWith('/app/v2/'), new CacheOnly());
پیکربندی استراتژیها
همه استراتژیها به شما امکان پیکربندی موارد زیر را میدهند:
- نام حافظه پنهانی که قرار است در استراتژی استفاده شود.
- محدودیتهای انقضای حافظه پنهان برای استفاده در استراتژی.
- آرایهای از افزونهها که متدهای چرخه حیات آنها هنگام دریافت و ذخیره درخواست فراخوانی میشوند.
تغییر حافظه پنهان مورد استفاده توسط یک استراتژی
شما میتوانید با ارائه یک نام برای کش، استراتژی مورد استفاده برای کش را تغییر دهید. این کار در صورتی مفید است که بخواهید فایلهای خود را برای کمک به اشکالزدایی، جدا کنید.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
registerRoute(
({request}) => request.destination === 'image',
new CacheFirst({
cacheName: 'image-cache',
})
);
استفاده از افزونهها
ورکباکس با مجموعهای از افزونهها ارائه میشود که میتوانند با این استراتژیها مورد استفاده قرار گیرند.
- همگامسازی پسزمینهی جعبهی کار
- پخش-بروزرسانی-جعبه-کار
- پاسخ قابل ذخیره در حافظه نهان (cacheable) در محیط کار
- انقضای جعبه کار
- درخواستهای محدودهی جعبهی کار
برای استفاده از هر یک از این افزونهها (یا یک افزونه سفارشی)، فقط باید نمونهها را به گزینه plugins ارسال کنید.
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({
// Only cache requests for a week
maxAgeSeconds: 7 * 24 * 60 * 60,
// Only cache 10 requests.
maxEntries: 10,
}),
],
})
);
استراتژیهای سفارشی
علاوه بر پیکربندی استراتژیها، Workbox به شما امکان میدهد استراتژیهای سفارشی خود را ایجاد کنید. این کار را میتوان با وارد کردن و گسترش کلاس پایه Strategy از workbox-strategies انجام داد:
import {Strategy} from 'workbox-strategies';
class NewStrategy extends Strategy {
_handle(request, handler) {
// Define handling logic here
}
}
در این مثال، handle() به عنوان یک استراتژی درخواست برای تعریف منطق خاص مدیریت استفاده میشود. دو استراتژی درخواست وجود دارد که میتوان از آنها استفاده کرد:
-
handle(): یک استراتژی درخواست را اجرا میکند و یکPromiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند. -
handleAll(): مشابهhandle()است، اما دو شیءPromiseرا برمیگرداند. اولی معادل چیزی است کهhandle()برمیگرداند و دومی زمانی حل میشود که promiseهایی که بهevent.waitUntil()در استراتژی اضافه شدهاند، تکمیل شوند.
هر دو استراتژی درخواست با دو پارامتر فراخوانی میشوند:
-
request:Requestکه استراتژی برای آن پاسخی برمیگرداند. -
handler: یک نمونهStrategyHandlerکه به طور خودکار برای استراتژی فعلی ایجاد میشود.
ایجاد یک استراتژی جدید
در ادامه مثالی از یک استراتژی جدید که رفتار NetworkOnly را مجدداً پیادهسازی میکند، آورده شده است:
class NewNetworkOnlyStrategy extends Strategy {
_handle(request, handler) {
return handler.fetch(request);
}
}
توجه کنید که چگونه به جای متد بومی fetch handler.fetch() فراخوانی شده است. کلاس StrategyHandler تعدادی عمل fetch و cache ارائه میدهد که میتوانند هر زمان که handle() یا handleAll() استفاده میشود، مورد استفاده قرار گیرند:
-
fetch: یک درخواست داده شده را دریافت میکند و متدهای چرخه عمر افزونهrequestWillFetch()،fetchDidSucceed()وfetchDidFail()را فراخوانی میکند. -
cacheMatch: یک درخواست از حافظه پنهان را تطبیق میدهد و متدهای چرخه عمر افزونههایcacheKeyWillBeUsed()وcachedResponseWillBeUsed()را فراخوانی میکند. -
cachePut: یک جفت درخواست/پاسخ را در حافظه پنهان قرار میدهد و متدهای چرخه عمر افزونههایcacheKeyWillBeUsed()،cacheWillUpdate()وcacheDidUpdate()را فراخوانی میکند. -
fetchAndCachePut: تابعfetch()را فراخوانی کرده وcachePut()را در پسزمینه روی پاسخ تولید شده توسطfetch()اجرا میکند. -
hasCallback: یک callback را به عنوان ورودی میگیرد و اگر استراتژی حداقل یک افزونه با callback داده شده داشته باشد، مقدار true را برمیگرداند. -
runCallbacks: تمام فراخوانیهای افزونهای که با یک نام مشخص مطابقت دارند را به ترتیب اجرا میکند و یک شیء param مشخص (که با وضعیت افزونه فعلی ادغام شده است) را به عنوان تنها آرگومان ارسال میکند. -
iterateCallbacks: یک فراخوانی برگشتی را میپذیرد و مجموعهای از فراخوانیهای پلاگین منطبق را برمیگرداند، که در آن هر فراخوانی برگشتی با وضعیت فعلی کنترلکننده پوشش داده میشود (یعنی وقتی هر فراخوانی برگشتی را فراخوانی میکنید، هر پارامتر شیء که ارسال میکنید با وضعیت فعلی پلاگین ادغام میشود). -
waitUntil: یک promise به promise های با طول عمر طولانی رویداد مرتبط با درخواست در حال پردازش (معمولاً یکFetchEvent) اضافه میکند. -
doneWaiting: یک promise را برمیگرداند که به محض اینکه تمام promiseهای ارسال شده بهwaitUntil()حل و فصل شوند، اجرا میشود. -
destroy: اجرای استراتژی را متوقف میکند و بلافاصله هرگونه promise در حال انتظارwaitUntil()را حل میکند.
استراتژی رقابتی شبکه کش سفارشی
مثال زیر بر اساس cache-network-race از کتاب آشپزی آفلاین (که Workbox آن را ارائه نمیدهد) است، اما یک قدم فراتر میرود و همیشه پس از یک درخواست موفق شبکه، حافظه پنهان را بهروزرسانی میکند. این مثالی از یک استراتژی پیچیدهتر است که از چندین اقدام استفاده میکند.
import {Strategy} from 'workbox-strategies';
class CacheNetworkRace extends Strategy {
_handle(request, handler) {
const fetchAndCachePutDone = handler.fetchAndCachePut(request);
const cacheMatchDone = handler.cacheMatch(request);
return new Promise((resolve, reject) => {
fetchAndCachePutDone.then(resolve);
cacheMatchDone.then(response => response && resolve(response));
// Reject if both network and cache error or find no response.
Promise.allSettled([fetchAndCachePutDone, cacheMatchDone]).then(
results => {
const [fetchAndCachePutResult, cacheMatchResult] = results;
if (
fetchAndCachePutResult.status === 'rejected' &&
!cacheMatchResult.value
) {
reject(fetchAndCachePutResult.reason);
}
}
);
});
}
}
کاربرد پیشرفته
اگر میخواهید از استراتژیها در منطق رویداد واکشی خود استفاده کنید، میتوانید از کلاسهای استراتژی برای اجرای یک درخواست از طریق یک استراتژی خاص استفاده کنید.
برای مثال، برای استفاده از استراتژی stale-while-revalidate، میتوانید موارد زیر را انجام دهید:
self.addEventListener('fetch', event => {
const {request} = event;
const url = new URL(request.url);
if (url.origin === location.origin && url.pathname === '/') {
event.respondWith(new StaleWhileRevalidate().handle({event, request}));
}
});
میتوانید فهرست کلاسهای موجود را در مستندات مرجع workbox-strategies بیابید.
انواع
CacheFirst
پیادهسازی استراتژی درخواست cache-first .
استراتژی cache first برای فایلهایی که قبلاً ویرایش شدهاند، مانند URLهایی مانند /styles/example.a8f5f1.css ، مفید است، زیرا میتوانند برای مدت طولانی در حافظه پنهان (cache) ذخیره شوند.
اگر درخواست شبکه با شکست مواجه شود و هیچ تطابقی در حافظه پنهان وجود نداشته باشد، این یک خطای WorkboxError ایجاد میکند.
خواص
- سازنده
باطل
یک نمونه جدید از استراتژی ایجاد میکند و تمام ویژگیهای گزینه مستند شده را به عنوان ویژگیهای نمونه عمومی تنظیم میکند.
نکته: اگر یک کلاس استراتژی سفارشی، کلاس پایه استراتژی را توسعه دهد و به بیش از این ویژگیها نیاز نداشته باشد، نیازی به تعریف سازنده مخصوص به خود ندارد.
تابع
constructorبه شکل زیر است:(options?: StrategyOptions) => {...}
- گزینهها
گزینههای استراتژی اختیاری
- بازده
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
CacheOnly
پیادهسازی استراتژی درخواست فقط-حافظه پنهان .
این کلاس در صورتی مفید است که بخواهید از هرگونه افزونه Workbox بهره ببرید.
اگر هیچ تطابقی در حافظه پنهان وجود نداشته باشد، این یک خطای WorkboxError ایجاد میکند.
خواص
- سازنده
باطل
یک نمونه جدید از استراتژی ایجاد میکند و تمام ویژگیهای گزینه مستند شده را به عنوان ویژگیهای نمونه عمومی تنظیم میکند.
نکته: اگر یک کلاس استراتژی سفارشی، کلاس پایه استراتژی را توسعه دهد و به بیش از این ویژگیها نیاز نداشته باشد، نیازی به تعریف سازنده مخصوص به خود ندارد.
تابع
constructorبه شکل زیر است:(options?: StrategyOptions) => {...}
- گزینهها
گزینههای استراتژی اختیاری
- بازده
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
NetworkFirst
پیادهسازی استراتژی درخواست مبتنی بر شبکه (Network First Request Strategy).
به طور پیشفرض، این استراتژی پاسخهایی با کد وضعیت ۲۰۰ و همچنین پاسخهای مبهم را ذخیره میکند. پاسخهای مبهم، درخواستهای بینمنبعی هستند که در آنها پاسخ از CORS پشتیبانی نمیکند.
اگر درخواست شبکه با شکست مواجه شود و هیچ تطابقی در حافظه پنهان وجود نداشته باشد، این یک خطای WorkboxError ایجاد میکند.
خواص
- سازنده
باطل
تابع
constructorبه شکل زیر است:(options?: NetworkFirstOptions) => {...}
- گزینهها
NetworkFirstOptions اختیاری است
- بازده
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
NetworkFirstOptions
خواص
- نام حافظه پنهان
رشته اختیاری
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- networkTimeoutSeconds
شماره اختیاری
- افزونهها
افزونهی WorkboxPlugin [] اختیاری
NetworkOnly
پیادهسازی استراتژی درخواست فقط از طریق شبکه .
این کلاس در صورتی مفید است که بخواهید از هرگونه افزونه Workbox بهره ببرید.
اگر درخواست شبکه با شکست مواجه شود، این یک خطای WorkboxError ایجاد میکند.
خواص
- سازنده
باطل
تابع
constructorبه شکل زیر است:(options?: NetworkOnlyOptions) => {...}
- گزینهها
گزینههای فقط شبکه اختیاری
- بازده
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
NetworkOnlyOptions
خواص
- گزینههای واکشی
درخواست شروع (اختیاری)
- networkTimeoutSeconds
شماره اختیاری
- افزونهها
افزونهی WorkboxPlugin [] اختیاری
StaleWhileRevalidate
پیادهسازی استراتژی درخواستهای stale-while-revalidate .
منابع به صورت موازی از حافظه پنهان و شبکه درخواست میشوند. در صورت وجود، استراتژی با نسخه ذخیره شده در حافظه پنهان پاسخ میدهد، در غیر این صورت منتظر پاسخ شبکه میماند. حافظه پنهان با پاسخ شبکه با هر درخواست موفق بهروزرسانی میشود.
به طور پیشفرض، این استراتژی پاسخهایی با کد وضعیت ۲۰۰ و همچنین پاسخهای مبهم را ذخیره میکند. پاسخهای مبهم، درخواستهای بینمنبعی هستند که در آنها پاسخ از CORS پشتیبانی نمیکند.
اگر درخواست شبکه با شکست مواجه شود و هیچ تطابقی در حافظه پنهان وجود نداشته باشد، این یک خطای WorkboxError ایجاد میکند.
خواص
- سازنده
باطل
تابع
constructorبه شکل زیر است:(options?: StrategyOptions) => {...}
- گزینهها
گزینههای استراتژی اختیاری
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
Strategy
یک کلاس پایه انتزاعی که همه کلاسهای استراتژی دیگر باید از آن مشتق شوند:
خواص
- سازنده
باطل
یک نمونه جدید از استراتژی ایجاد میکند و تمام ویژگیهای گزینه مستند شده را به عنوان ویژگیهای نمونه عمومی تنظیم میکند.
نکته: اگر یک کلاس استراتژی سفارشی، کلاس پایه استراتژی را توسعه دهد و به بیش از این ویژگیها نیاز نداشته باشد، نیازی به تعریف سازنده مخصوص به خود ندارد.
تابع
constructorبه شکل زیر است:(options?: StrategyOptions) => {...}
- گزینهها
گزینههای استراتژی اختیاری
- بازده
- نام حافظه پنهان
رشته
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
- _awaitکامل
باطل
تابع
_awaitCompleteبه شکل زیر است:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- پاسخانجام شد
قول<پاسخ>
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<void>
- _getResponse
باطل
تابع
_getResponseبه شکل زیر است:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
- رسیدگی کننده
- درخواست
درخواست
- رویداد
رویداد قابل توسعه
- بازده
قول<پاسخ>
- دسته
باطل
تابع
_handleبه شکل زیر است:(request: Request, handler: StrategyHandler) => {...}
- درخواست
درخواست
- رسیدگی کننده
- بازده
قول<پاسخ>
- رسیدگی
باطل
یک استراتژی درخواست را اجرا میکند و یک
Promiseبرمیگرداند که با یکResponseحل میشود و تمام callbackهای افزونه مربوطه را فراخوانی میکند.وقتی یک نمونه استراتژی با Workbox
workbox-routing.Routeثبت میشود، این متد به طور خودکار هنگام تطابق مسیر فراخوانی میشود.به عنوان یک روش جایگزین، میتوان این متد را با ارسال به
event.respondWith()در یک شنوندهی مستقلFetchEventاستفاده کرد.تابع
handleبه شکل زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
قول<پاسخ>
- همه را مدیریت کنید
باطل
مشابه
workbox-strategies.Strategy~handle، اما به جای اینکه فقط یکPromiseکه به یکResponseختم میشود، برگرداند، یک چندتایی از Promiseهای[response, done]را برمیگرداند، که اولی (response) معادل چیزی است کهhandle()برمیگرداند، و دومی Promise ای است که پس از تکمیل هر Promise اضافه شده بهevent.waitUntil()به عنوان بخشی از اجرای strategy، حل خواهد شد.شما میتوانید منتظر «
done» بمانید تا مطمئن شوید که هرگونه کار اضافی انجام شده توسط استراتژی (معمولاً ذخیرهسازی پاسخها) با موفقیت انجام میشود.تابع
handleAllبه صورت زیر است:(options: FetchEvent | HandlerCallbackOptions) => {...}
- گزینهها
FetchEvent | گزینههای HandlerCallback
یک
FetchEventیا یک شیء با ویژگیهای لیست شده در زیر.
- بازده
[قول <پاسخ>، قول <باطل>]
یک چندتایی از promise های [response, done] که میتوانند برای تعیین زمان حل شدن پاسخ و همچنین زمان اتمام تمام کارهای هندلر استفاده شوند.
StrategyHandler
کلاسی که هر بار یک نمونه Strategy، workbox-strategies.Strategy~handle یا workbox-strategies.Strategy~handleAll فراخوانی میکند، ایجاد میشود. این کلاس تمام اقدامات fetch و cache را حول فراخوانیهای افزونه قرار میدهد و زمان "انجام شدن" استراتژی را پیگیری میکند (یعنی تمام promiseهای event.waitUntil() اضافه شده، اجرا شدهاند).
خواص
- سازنده
باطل
یک نمونه جدید مرتبط با استراتژی و رویداد ارسالی که درخواست را مدیریت میکند، ایجاد میکند.
سازنده همچنین حالتی را که به هر یک از افزونههای مدیریتکننده این درخواست ارسال خواهد شد، مقداردهی اولیه میکند.
تابع
constructorبه شکل زیر است:(strategy: Strategy, options: HandlerCallbackOptions) => {...}
- استراتژی
- گزینهها
- بازده
- رویداد
رویداد قابل توسعه
- پارامترها
هر اختیاری
- درخواست
درخواست
- آدرس اینترنتی
آدرس اینترنتی (URL) اختیاری
- کش مچ
باطل
با استفاده از
cacheName،matchOptionsوpluginsتعریف شده در شیء strategy، یک درخواست از حافظه پنهان (cache) را تطبیق میدهد (و هر متد فراخوانی افزونه مربوطه را فراخوانی میکند).هنگام استفاده از این روش، متدهای چرخه حیات افزونه زیر فراخوانی میشوند:
- تابع ()cacheKeyWillBeUsed
- تابع ()cacheedResponseWillBeUsed را فراخوانی میکند.
تابع
cacheMatchبه شکل زیر است:(key: RequestInfo) => {...}
- کلید
درخواست اطلاعات
درخواست یا URL مورد نظر برای استفاده به عنوان کلید کش.
- بازده
قول<پاسخ>
پاسخی منطبق، در صورت یافتن.
- کشپوت
باطل
یک جفت درخواست/پاسخ را در حافظه پنهان قرار میدهد (و هر متد فراخوانی افزونه مربوطه را فراخوانی میکند) با استفاده از
cacheNameوpluginsتعریف شده در شیء strategy.هنگام استفاده از این روش، متدهای چرخه حیات افزونه زیر فراخوانی میشوند:
- تابع ()cacheKeyWillBeUsed
- cacheWillUpdate()
- cacheDidUpdate()
تابع
cachePutبه شکل زیر است:(key: RequestInfo, response: Response) => {...}
- کلید
درخواست اطلاعات
درخواست یا URL مورد استفاده به عنوان کلید حافظه پنهان.
- پاسخ
پاسخ
پاسخ به حافظه پنهان.
- بازده
قول <boolean>
اگر cacheWillUpdate باعث شود پاسخ ذخیره نشود،
falseو در غیر این صورتtrueبرمیگرداند.
- نابود کردن
باطل
اجرای استراتژی را متوقف میکند و بلافاصله هرگونه promise در حال انتظار
waitUntil()را حل میکند.تابع
destroyبه شکل زیر است:() => {...} - انجام شددر انتظار
باطل
یک promise را برمیگرداند که به محض اینکه تمام promise های ارسال شده به
workbox-strategies.StrategyHandler~waitUntilحل و فصل شوند، حل و فصل میشود.نکته: هر کاری که پس از انجام تابع
doneWaiting()انجام شود، باید به صورت دستی به متدwaitUntil()یک رویداد (نه متدwaitUntil()این هندلر) ارسال شود، در غیر این صورت ممکن است نخ سرویس ورکر قبل از اتمام کار شما از بین برود.تابع
doneWaitingبه شکل زیر است:() => {...}- بازده
قول<void>
- واکشی کردن
باطل
با استفاده از
fetchOptions(برای درخواستهای غیر ناوبری) وpluginsتعریفشده در شیءStrategy، یک درخواست دادهشده را دریافت میکند (و هرگونه متد فراخوانی افزونهی مربوطه را فراخوانی میکند).هنگام استفاده از این روش، متدهای چرخه حیات افزونه زیر فراخوانی میشوند:
-
requestWillFetch() -
fetchDidSucceed() -
fetchDidFail()
تابع
fetchبه شکل زیر است:(input: RequestInfo) => {...}
- ورودی
درخواست اطلاعات
آدرس اینترنتی یا درخواست برای واکشی.
- بازده
قول<پاسخ>
-
- واکشی و ذخیره سازی
باطل
تابع
this.fetch()را فراخوانی میکند و (در پسزمینه)this.cachePut()را روی پاسخ تولید شده توسطthis.fetch()اجرا میکند.فراخوانی
this.cachePut()به طور خودکارthis.waitUntil()فراخوانی میکند، بنابراین لازم نیستwaitUntil()به صورت دستی در رویداد فراخوانی کنید.تابع
fetchAndCachePutبه شکل زیر است:(input: RequestInfo) => {...}
- ورودی
درخواست اطلاعات
درخواست یا URL برای واکشی و ذخیره سازی.
- بازده
قول<پاسخ>
- کلید دریافت کش
باطل
لیست افزونهها را برای فراخوانی
cacheKeyWillBeUsedبررسی میکند و هر یک از فراخوانیهای یافت شده را به ترتیب اجرا میکند. شیءRequestنهایی که توسط آخرین افزونه برگردانده میشود، به عنوان کلید حافظه پنهان برای خواندن و/یا نوشتن در حافظه پنهان در نظر گرفته میشود. اگر هیچ فراخوانی افزونهcacheKeyWillBeUsedثبت نشده باشد، درخواست ارسالی بدون تغییر برگردانده میشود.تابع
getCacheKeyبه شکل زیر است:(request: Request, mode: "read"
| "write"
) => {...}- درخواست
درخواست
- حالت
«خواندن»
| «بنویس»
- بازده
قول<درخواست>
- hasCallback
باطل
اگر استراتژی حداقل یک افزونه با فراخوانی داده شده داشته باشد، مقدار true را برمیگرداند.
تابع
hasCallbackبه شکل زیر است:(name: C) => {...}
- نام
سی
نام فراخوانی که باید بررسی شود.
- بازده
بولی
- تکرار فراخوانیهای برگشتی
باطل
یک تابع فراخوانی (callback) را میپذیرد و مجموعهای از توابع فراخوانی افزونه منطبق را برمیگرداند، که در آن هر تابع فراخوانی با وضعیت فعلی کنترلکننده (handler state) ادغام میشود (یعنی وقتی هر تابع فراخوانی را فراخوانی میکنید، هر پارامتر شیء که ارسال میکنید با وضعیت فعلی افزونه ادغام خواهد شد).
تابع
iterateCallbacksبه شکل زیر است:(name: C) => {...}
- نام
سی
نام فراخوانی برای اجرا
- بازده
مولد <NonNullable<indexedAccess>anyunknown>
- اجرای فراخوانیهای برگشتی
باطل
تمام فراخوانیهای افزونهای که با نام داده شده مطابقت دارند را به ترتیب اجرا میکند و شیء پارامتر داده شده (که با وضعیت افزونه فعلی ادغام شده است) را به عنوان تنها آرگومان ارسال میکند.
توجه: از آنجایی که این روش تمام افزونهها را اجرا میکند، برای مواردی که مقدار برگشتی یک تابع فراخوانی قبل از فراخوانی تابع فراخوانی بعدی باید اعمال شود، مناسب نیست. برای نحوه مدیریت این مورد، به
workbox-strategies.StrategyHandler#iterateCallbacksدر زیر مراجعه کنید.تابع
runCallbacksبه شکل زیر است:(name: C, param: Omit<indexedAccess"state"
>) => {...}- نام
سی
نام تابع فراخوانی که قرار است درون هر افزونه اجرا شود.
- پارام
حذف <indexedAccess "state"
>شیءای که به عنوان اولین (و تنها) پارامتر هنگام اجرای هر فراخوانی برگشتی ارسال میشود. این شیء قبل از اجرای فراخوانی برگشتی با وضعیت فعلی افزونه ادغام خواهد شد.
- بازده
قول<void>
- صبر کنید تا
باطل
یک promise به [extend lifetime promises]
https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promisesرویداد مرتبط با درخواست در حال پردازش (معمولاً یکFetchEvent) اضافه میکند.نکته: میتوانید منتظر بمانید تا ببینید چه زمانی همه promiseهای اضافه شده اجرا میشوند. (یا: میتوانید منتظر بمانید
workbox-strategies.StrategyHandler~doneWaitingتا بدانید چه زمانی همه promiseهای اضافه شده اجرا میشوند.)تابع
waitUntilبه شکل زیر است:(promise: Promise<T>) => {...}
- وعده
قول بده<T>
وعدهای برای افزودن به وعدههای طول عمر طولانی رویدادی که درخواست را فعال کرده است.
- بازده
قول بده<T>
StrategyOptions
خواص
- نام حافظه پنهان
رشته اختیاری
- گزینههای واکشی
درخواست شروع (اختیاری)
- گزینههای تطبیق
گزینههای CacheQuery اختیاری
- افزونهها
افزونهی WorkboxPlugin [] اختیاری