عند طرح مهام الخدمة لأول مرة، ظهرت مجموعة من استراتيجيات التخزين المؤقت الشائعة. استراتيجية التخزين المؤقت هي نمط يحدّد كيفية إنشاء عامل الخدمة للردّ بعد تلقّي حدث جلب.
يوفّر workbox-strategies
استراتيجيات التخزين المؤقت الأكثر شيوعًا لتسهيل
تطبيقها في الخدمة العاملة.
لن نتطرق إلى الكثير من التفاصيل خارج الاستراتيجيات المتوافقة مع 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());
ذاكرة التخزين المؤقت فقط
تضمن استراتيجية ذاكرة التخزين المؤقت فقط الحصول على الردود من ذاكرة تخزين مؤقت. هذه الطريقة أقل شيوعًا في "علبة العمل"، ولكن يمكن أن تكون مفيدة إذا كانت لديك خطوة ذاكرة التخزين المؤقت المُسبَق الخاصة بك.
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',
})
);
استخدام المكوّنات الإضافية
تأتي Workbox مع مجموعة من الإضافات التي يمكن استخدامها مع هذه الاستراتيجيات.
- workbox-background-sync
- workbox-broadcast-update
- workbox-cacheable-response
- workbox-expiration
- workbox-range-requests
لاستخدام أيّ من هذه المكوّنات الإضافية (أو مكوّن إضافي مخصّص)، ما عليك سوى إدخال
العناصر إلى الخيار 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
، مع استدعاء جميع عمليات معاودة الاتصال ذات الصلة بالمكونات الإضافية-
handleAll()
: تشبهhandle()
، ولكنها تعرض شيئَين من النوعPromise
. القيمة الأولى هي القيمة نفسها التي تعرضهاhandle()
، وسيتمّ حلّ القيمة الثانية عند اكتمال الوعود التي تمت إضافتها إلىevent.waitUntil()
ضمن الاستراتيجية.
يتمّ استدعاء كلتا استراتيجيتَي الطلبات باستخدام مَعلمتَين:
request
:Request
الذي ستُعرِض الاستراتيجية ردًا عليه.handler
: مثيلStrategyHandler
تم إنشاؤه تلقائيًا للاستراتيجية الحالية.
إنشاء استراتيجية جديدة
في ما يلي مثال على استراتيجية جديدة تعيد تنفيذ سلوك NetworkOnly
:
class NewNetworkOnlyStrategy extends Strategy {
_handle(request, handler) {
return handler.fetch(request);
}
}
لاحِظ كيفية استدعاء handler.fetch()
بدلاً من الطريقة الأصلية fetch
. توفّر فئة StrategyHandler
عددًا من إجراءات الجلب والتخزين المؤقت التي يمكن استخدامها عند استخدام handle()
أو
handleAll()
:
fetch
: تُستخدَم هذه الطريقة لجلب طلب معيّن، وتنشيط طرقrequestWillFetch()
وfetchDidSucceed()
وfetchDidFail()
لدورة حياة المكوّن الإضافي.cacheMatch
: تطابق طلبًا من ذاكرة التخزين المؤقت، وتستدعي طريقتَيcacheKeyWillBeUsed()
وcachedResponseWillBeUsed()
لمراحل نشاط المكوّن الإضافيcachePut
: تضع زوج طلب/استجابة في ذاكرة التخزين المؤقت، وتستدعي طرق دورة حياة المكوّن الإضافيcacheKeyWillBeUsed()
وcacheWillUpdate()
وcacheDidUpdate()
fetchAndCachePut
: يتصل بـfetch()
ويشغّلcachePut()
في الخلفية استجابةً لما ينشئهfetch()
.-
hasCallback
: تأخذ دالة ردّ اتصال كإدخال وتُعرِض القيمة "صحيح" إذا كانت الاستراتيجية تتضمّن مكوّنًا إضافيًا واحدًا على الأقل مع دالة ردّ الاتصال المحدّدة. runCallbacks
: لتشغيل جميع عمليات استدعاء المكوّن الإضافي التي تتطابق مع اسم معيّن، بالترتيب، مع تمرير param object معيّن (مدمَج مع حالة المكوّن الإضافي الحالية) كوسيطة فقط.-
iterateCallbacks
: تقبل دالة معاودة الاتصال وتُعرِض مجموعة قابلة للتكرار من دوال معاودة الاتصال المطابقة للمكونات الإضافية، حيث يتم لف كل دالة معاودة اتصال بحالة معالِج الأحداث الحالية (أي عند استدعاء كل دالة معاودة اتصال، سيتم دمج أي مَعلمة عنصر يتم تمريرها مع الحالة الحالية للإضافة). waitUntil
: تُضيف وعدًا إلى تعهدات تمديد مدة صلاحية الحدث المرتبط بالملف الشخصي الذي تتم معالجته (عادةًFetchEvent
).doneWaiting
: تعرِض وعدًا يتم حلّه بعد اكتمال كل الوعود التي تم تمريرها إلىwaitUntil()
.destroy
: يوقف تنفيذ الاستراتيجية ويحلّ على الفور أيّ تعهداتwaitUntil()
معلّقة.
استراتيجية "شبكة ذاكرة التخزين المؤقت المخصّصة"
يستند المثال التالي إلى cache-network-race من "Offline Cookbook" (الذي لا يوفّره 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);
}
}
);
});
}
}
الاستخدام المتقدّم
إذا كنت تريد استخدام الاستراتيجيات في منطق حدث الجلب الخاص بك، يمكنك استخدام فئات الاستراتيجيات لتنفيذ طلب من خلال استراتيجية معيّنة.
على سبيل المثال، لاستخدام استراتيجية "البيانات القديمة أثناء إعادة التحقّق"، يمكنك إجراء ما يلي:
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.
الأنواع
CacheFirst
تنفيذ استراتيجية طلبات الاستناد إلى ذاكرة التخزين المؤقت أولاً
تكون استراتيجية "التخزين المؤقت أولاً" مفيدة لمواد العرض التي تم إجراء مراجعات عليها،
مثل عناوين URL مثل /styles/example.a8f5f1.css
، لأنّه
يمكن تخزينها مؤقتًا لفترات طويلة.
إذا تعذّر طلب الشبكة ولم يتم العثور على مطابقة في ذاكرة التخزين المؤقت، سيؤدي ذلك إلى طرح
استثناء WorkboxError
.
أماكن إقامة
-
constructor
غير صالح
تُنشئ مثيلًا جديدًا للاستراتيجية وتضبط جميع ملفّات خيار الموثَّقة على أنّها ملفّات مثيل علنية.
ملاحظة: إذا كانت فئة استراتيجية مخصّصة تمدّد فئة Strategy الأساسية ولا تحتاج إلى أكثر من هذه السمات، لن تحتاج إلى تحديد ملف سازنده خاص بها.
تبدو الدالة
constructor
على النحو التالي:(options?: StrategyOptions) => {...}
-
الخيارات
StrategyOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
CacheOnly
تنفيذ استراتيجية طلبات ذاكرة التخزين المؤقت فقط
يكون هذا الصف مفيدًا إذا كنت تريد الاستفادة من أي مكوّنات إضافية في Workbox.
في حال عدم تطابق ذاكرة التخزين المؤقت، سيؤدي ذلك إلى طرح استثناء WorkboxError
.
أماكن إقامة
-
constructor
غير صالح
تُنشئ مثيلًا جديدًا للاستراتيجية وتضبط جميع ملفّات خيار الموثَّقة على أنّها ملفّات مثيل علنية.
ملاحظة: إذا كانت فئة استراتيجية مخصّصة تمدّد فئة Strategy الأساسية ولا تحتاج إلى أكثر من هذه السمات، لن تحتاج إلى تحديد ملف سازنده خاص بها.
تبدو الدالة
constructor
على النحو التالي:(options?: StrategyOptions) => {...}
-
الخيارات
StrategyOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
NetworkFirst
تنفيذ استراتيجية طلبات الشبكة أولاً
ستخزّن هذه الاستراتيجية تلقائيًا الردود التي تتضمّن رمز الحالة 200، بالإضافة إلى الردود غير الشفافة. الردود غير الشفافة هي طلبات من مصادر مختلفة لا يسمح فيها بالاستجابة باستخدام CORS.
إذا تعذّر طلب الشبكة ولم يتم العثور على مطابقة في ذاكرة التخزين المؤقت، سيؤدي ذلك إلى طرح
استثناء WorkboxError
.
أماكن إقامة
-
constructor
غير صالح
تبدو الدالة
constructor
على النحو التالي:(options?: NetworkFirstOptions) => {...}
-
الخيارات
NetworkFirstOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
NetworkFirstOptions
أماكن إقامة
-
cacheName
سلسلة اختيارية
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
networkTimeoutSeconds
رقم اختياري
-
المكوّنات الإضافية
WorkboxPlugin[] اختياري
NetworkOnly
تنفيذ استراتيجية طلبات على الشبكة فقط
يكون هذا الصف مفيدًا إذا كنت تريد الاستفادة من أي مكوّنات إضافية في Workbox.
إذا تعذّر طلب الشبكة، سيؤدي ذلك إلى طرح استثناء WorkboxError
.
أماكن إقامة
-
constructor
غير صالح
تبدو الدالة
constructor
على النحو التالي:(options?: NetworkOnlyOptions) => {...}
-
الخيارات
NetworkOnlyOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
NetworkOnlyOptions
أماكن إقامة
-
fetchOptions
RequestInit اختياري
-
networkTimeoutSeconds
رقم اختياري
-
المكوّنات الإضافية
WorkboxPlugin[] اختياري
StaleWhileRevalidate
تنفيذ استراتيجية طلب stale-while-revalidate
يتم طلب الموارد من ذاكرة التخزين المؤقت والشبكة بشكل متزامن. ستستجيب الاستراتيجية بالإصدار المخزّن مؤقتًا إذا كان متاحًا، وإلا ستنتظر استجابة الشبكة. يتم تعديل ذاكرة التخزين المؤقت استنادًا إلى ردّ الشبكة مع كل طلب ناجح.
ستخزّن هذه الاستراتيجية تلقائيًا الردود التي تتضمّن رمز الحالة 200، بالإضافة إلى الردود غير الشفافة. الردود غير الشفافة هي طلبات من مصادر مختلفة لا يسمح فيها بالاستجابة باستخدام CORS.
إذا تعذّر طلب الشبكة ولم يتم العثور على مطابقة في ذاكرة التخزين المؤقت، سيؤدي ذلك إلى طرح
استثناء WorkboxError
.
أماكن إقامة
-
constructor
غير صالح
تبدو الدالة
constructor
على النحو التالي:(options?: StrategyOptions) => {...}
-
الخيارات
StrategyOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
Strategy
فئة أساسية مجردة يجب أن تمتد منها جميع فئات الاستراتيجيات الأخرى:
أماكن إقامة
-
constructor
غير صالح
تُنشئ مثيلًا جديدًا للاستراتيجية وتضبط جميع ملفّات خيار الموثَّقة على أنّها ملفّات مثيل علنية.
ملاحظة: إذا كانت فئة استراتيجية مخصّصة تمدّد فئة Strategy الأساسية ولا تحتاج إلى أكثر من هذه السمات، لن تحتاج إلى تحديد ملف سازنده خاص بها.
تبدو الدالة
constructor
على النحو التالي:(options?: StrategyOptions) => {...}
-
الخيارات
StrategyOptions اختيارية
-
returns
-
-
cacheName
سلسلة
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
-
_awaitComplete
غير صالح
تبدو الدالة
_awaitComplete
على النحو التالي:(responseDone: Promise<Response>, handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
responseDone
Promise<Response>
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<void>
-
-
_getResponse
غير صالح
تبدو الدالة
_getResponse
على النحو التالي:(handler: StrategyHandler, request: Request, event: ExtendableEvent) => {...}
-
المعالج
-
طلب
الطلب
-
حدث
ExtendableEvent
-
returns
Promise<Response>
-
-
_handle
غير صالح
تبدو الدالة
_handle
على النحو التالي:(request: Request, handler: StrategyHandler) => {...}
-
طلب
الطلب
-
المعالج
-
returns
Promise<Response>
-
-
مؤشر
غير صالح
تنفيذ استراتيجية طلب وإرجاع
Promise
سيتم حلّه باستخدامResponse
، مع استدعاء جميع عمليات استدعاء المكوّنات الإضافية ذات الصلةعند تسجيل مثيل استراتيجية باستخدام Workbox
workbox-routing.Route
، يتم تلقائيًا استدعاء هذه الطريقة عند مطابقة المسار.بدلاً من ذلك، يمكن استخدام هذه الطريقة في
FetchEvent
مستمع مستقل من خلال تمريرها إلىevent.respondWith()
.تبدو الدالة
handle
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
Promise<Response>
-
-
handleAll
غير صالح
يشبه
workbox-strategies.Strategy~handle
، ولكن بدلاً من عرضPromise
الذي يحلّ محلResponse
، فإنه سيعرض مجموعة من[response, done]
الوعود، حيث يكون العنصر السابق (response
) مساويًا لما يعرضهhandle()
، والعنصر الأخير هو وعد سيتم حلّه بعد اكتمال أي وعود تمت إضافتها إلىevent.waitUntil()
كجزء من تنفيذ الاستراتيجية.يمكنك انتظار
done
promise لضمان اكتمال أي عمل إضافي تنفّذه الاستراتيجية (عادةً ما يكون تخزين الإجابات مؤقتًا) بنجاح.تبدو الدالة
handleAll
على النحو التالي:(options: FetchEvent | HandlerCallbackOptions) => {...}
-
الخيارات
FetchEvent | HandlerCallbackOptions
FetchEvent
أو عنصر يتضمّن السمات الواردة أدناه
-
returns
[Promise<Response>, Promise<void>]
مجموعة من الوعود [response, done] التي يمكن استخدامها لتحديد وقت حلّ الاستجابة وكذلك وقت اكتمال المعالج لجميع أعماله
-
StrategyHandler
فئة يتم إنشاؤها في كل مرة يُطلِق فيها مثيل Strategy workbox-strategies.Strategy~handle
أو
workbox-strategies.Strategy~handleAll
التي تلفّ جميع إجراءات الجلب
والذاكرة المؤقتة حول عمليات استدعاء المكوّنات الإضافية وتتتبّع وقت "انتهاء" الاستراتيجية (أي تم حلّ جميع event.waitUntil()
promises المُضافة).
أماكن إقامة
-
constructor
غير صالح
تُنشئ هذه الوظيفة مثيلًا جديدًا مرتبطًا بالاستراتيجية والحدث المُرسَلين والمعنيّين بمعالجة الطلب.
يُنشئ المُنشئ أيضًا الحالة التي سيتم تمريرها إلى كل من الإضافات التي تعالج هذا الطلب.
تبدو الدالة
constructor
على النحو التالي:(strategy: Strategy, options: HandlerCallbackOptions) => {...}
-
الإستراتيجية
-
الخيارات
-
returns
-
-
حدث
ExtendableEvent
-
params
أيّ اختياري
-
طلب
الطلب
-
url
عنوان URL اختياري
-
cacheMatch
غير صالح
تتطابق مع طلب من ذاكرة التخزين المؤقت (وتستدعي أيّ من طُرق callback الخاصة بالمكونات الإضافية السارية) باستخدام
cacheName
وmatchOptions
وplugins
المحدّدة في كائن الاستراتيجية.يتمّ استدعاء طرق دورة حياة المكوّن الإضافي التالية عند استخدام هذه الطريقة:
- cacheKeyWillBeUsed()
- cachedResponseWillBeUsed()
تبدو الدالة
cacheMatch
على النحو التالي:(key: RequestInfo) => {...}
-
مفتاح
RequestInfo
الطلب أو عنوان URL المُراد استخدامه كمفتاح ذاكرة التخزين المؤقت
-
returns
Promise<Response>
إجابة مطابقة، في حال توفّرها
-
cachePut
غير صالح
تضع هذه الطريقة زوج طلب/استجابة في ذاكرة التخزين المؤقت (وتستدعي أي مثيل من مثيلات طرق الاستدعاء الخاصة بالمكونات الإضافية) باستخدام
cacheName
وplugins
المحدَّدين في عنصر الاستراتيجية.يتمّ استدعاء طرق دورة حياة المكوّن الإضافي التالية عند استخدام هذه الطريقة:
- cacheKeyWillBeUsed()
- cacheWillUpdate()
- cacheDidUpdate()
تبدو الدالة
cachePut
على النحو التالي:(key: RequestInfo, response: Response) => {...}
-
مفتاح
RequestInfo
الطلب أو عنوان URL المراد استخدامه كمفتاح ذاكرة التخزين المؤقت
-
رد
الرد
الاستجابة لذاكرة التخزين المؤقت.
-
returns
Promise<boolean>
false
إذا تسببت cacheWillUpdate في عدم تخزين الاستجابة مؤقتًا، وtrue
بخلاف ذلك.
-
إتلافه
غير صالح
يوقف تنفيذ الاستراتيجية ويحلّ على الفور أيّ وعد
waitUntil()
معلّق.تبدو الدالة
destroy
على النحو التالي:() => {...}
-
doneWaiting
غير صالح
تعرِض وعدًا يتم حلّه بعد تسوية جميع الوعود التي تم تمريرها إلى
workbox-strategies.StrategyHandler~waitUntil
.ملاحظة: يجب توجيه أي عمل تم تنفيذه بعد تسوية
doneWaiting()
يدويًا إلى طريقةwaitUntil()
للحدث (وليس إلى طريقةwaitUntil()
لمعالج هذا الحدث)، وإلا قد يتم إنهاء سلسلة مهام مشغّل الخدمات قبل اكتمال عملك.تبدو الدالة
doneWaiting
على النحو التالي:() => {...}
-
returns
Promise<void>
-
-
استرجاع
غير صالح
تُستخدَم هذه الوظيفة لجلب طلب معيّن (وتنشيط أيّ من طرق callback المتوافقة مع المكوّن الإضافي) باستخدام
fetchOptions
(لطلبات التنقّل) وplugins
المحدّدَين في عنصرStrategy
.يتمّ استدعاء طرق دورة حياة المكوّن الإضافي التالية عند استخدام هذه الطريقة:
requestWillFetch()
fetchDidSucceed()
fetchDidFail()
تبدو الدالة
fetch
على النحو التالي:(input: RequestInfo) => {...}
-
الإدخال
RequestInfo
عنوان URL أو طلب الجلب
-
returns
Promise<Response>
-
fetchAndCachePut
غير صالح
يتصل
this.fetch()
بتطبيقthis.cachePut()
و (في الخلفية) يشغّلthis.cachePut()
على الردّ الذي أنشأهthis.fetch()
.يؤدي طلب
this.cachePut()
تلقائيًا إلى استدعاءthis.waitUntil()
، لذا ليس عليك طلبwaitUntil()
يدويًا في الحدث.تبدو الدالة
fetchAndCachePut
على النحو التالي:(input: RequestInfo) => {...}
-
الإدخال
RequestInfo
الطلب أو عنوان URL المطلوب جلبه وتخزينه مؤقتًا.
-
returns
Promise<Response>
-
-
getCacheKey
غير صالح
تتحقّق من قائمة المكوّنات الإضافية لإجراء استدعاء
cacheKeyWillBeUsed
، و ejecutany من عمليات الاستدعاء هذه التي يتم العثور عليها بالتسلسل. يتم التعامل مع العنصرRequest
النهائي الذي يعرضه المكوّن الإضافي الأخير على أنّه مفتاح ذاكرة التخزين المؤقت لعمليات قراءة ملف التخزين المؤقت و/أو كتابته. إذا لم يتم تسجيل أيcacheKeyWillBeUsed
وظائف استدعاء للمكونات الإضافية، يتم عرض الطلب الذي تم تمريره بدون تعديل.تبدو الدالة
getCacheKey
على النحو التالي:(request: Request, mode: "read"
| "write"
) => {...}-
طلب
الطلب
-
الوضع
"read"
| "write"
-
returns
Promise<Request>
-
-
hasCallback
غير صالح
تعرِض هذه الدالة القيمة true إذا كانت الاستراتيجية تحتوي على مكوّن إضافي واحد على الأقل يحتوي على دالّة callback المحدّدة.
تبدو الدالة
hasCallback
على النحو التالي:(name: C) => {...}
-
الاسم
C
اسم طلب إعادة الاتصال المطلوب البحث عنه.
-
returns
قيمة منطقية
-
-
iterateCallbacks
غير صالح
يقبل دالة استدعاء وتُرجع مجموعة قابلة للتكرار من دوال استدعاء المكوّن الإضافي المطابقة، حيث يتم لف كل دالة استدعاء بحالة معالِج الحدث الحالية (أي عند استدعاء كل دالة استدعاء، سيتم دمج أي مَعلمة عنصر يتم تمريرها مع الحالة الحالية للمكوّن الإضافي).
تبدو الدالة
iterateCallbacks
على النحو التالي:(name: C) => {...}
-
الاسم
C
اسم دالة الاستدعاء المطلوب تنفيذها
-
returns
Generator<NonNullable<indexedAccess>anyunknown>
-
-
runCallbacks
غير صالح
تُشغِّل جميع عمليات استدعاء المكوّن الإضافي التي تتطابق مع الاسم المحدّد، بالترتيب، مع تمرير ملفparam.js المحدّد (المدمج مع حالة المكوّن الإضافي الحالية) كوسيطة الوحيدة.
ملاحظة: بما أنّ هذه الطريقة تشغّل جميع الإضافات، فهي غير مناسبة للحالات التي يجب فيها تطبيق القيمة المعروضة في دالة الاستدعاء قبل استدعاء دالة الاستدعاء التالية. اطّلِع على القسم
workbox-strategies.StrategyHandler#iterateCallbacks
أدناه لمعرفة كيفية التعامل مع هذه الحالة.تبدو الدالة
runCallbacks
على النحو التالي:(name: C, param: Omit<indexedAccess"state"
>) => {...}-
الاسم
C
اسم دالة الاستدعاء المطلوب تنفيذها في كل مكوّن إضافي.
-
param
Omit<indexedAccess"state"
>العنصر الذي سيتم تمريره كأول مَعلمة (والوحيدة) عند تنفيذ كل ردّ اتصال سيتم دمج هذا العنصر مع حالة المكوّن الإضافي الحالية قبل تنفيذ دالة الاستدعاء.
-
returns
Promise<void>
-
-
waitUntil
غير صالح
تُضيف وعدًا إلى [extend lifetime promises]
https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises
للحدث المرتبط بالطلب الذي تتم معالجته (عادةً هوFetchEvent
).ملاحظة: يمكنك الانتظار
workbox-strategies.StrategyHandler~doneWaiting
لمعرفة وقت تسوية جميع التعهدات المُضافة.تبدو الدالة
waitUntil
على النحو التالي:(promise: Promise<T>) => {...}
-
وعد
Promise<T>
وعد بإضافة مدة إضافية إلى المدة التي وعد بها العميل للحدث الذي أدّى إلى تقديم الطلب
-
returns
Promise<T>
-
StrategyOptions
أماكن إقامة
-
cacheName
سلسلة اختيارية
-
fetchOptions
RequestInit اختياري
-
matchOptions
CacheQueryOptions اختياري
-
المكوّنات الإضافية
WorkboxPlugin[] اختياري