تعديلات على واجهة برمجة تطبيقات ذاكرة التخزين المؤقت للعاملين في الخدمات

طُلب منّي كتابة هذه المشاركة بخصوص تعديل بسيط إلى حدّ ما على واجهة برمجة التطبيقات الخاصة بذاكرة التخزين المؤقت لمشغّل الخدمات. لم أكن أعتقد أن المقالة لها ما يبررها، ولكن بعد نقاش طويل انتهى في نهاية المطاف إلى لعبة "حجر مقص ورقي"، خسرت، وها هي.

هل أنت على استعداد لمعرفة آخر الأخبار حول تطبيق Chrome لواجهة برمجة التطبيقات الخاصة بذاكرة التخزين المؤقت لمشغّل الخدمات؟

لا يمكنني سماعك! لقد قلت: هل أنت على استعداد للتعرُّف على تحديثات تطبيق Chrome لواجهة برمجة التطبيقات الخاصة بمشغّل الخدمات مؤقتًا؟

(يمكنك مواصلة القراءة فقط إذا قفزت على الكرسي وصرخت "YEAHHH!". في الوقت نفسه، التظاهر بتأرجح الريشة هو أمر اختياري، ولكننا نشجعك على ذلك).

وصول cache.addAll إلى الإصدار Chrome 46

نعم. إجابتك صحيحة. ذاكرة التخزين المؤقت! يجب إضافة الكل. Chrome 46!

حسنًا، السخرية هي أمر كبير جدًا، لأنّ cache.addAll هو الجزء المتبقّي من عنصر polyfill "الأساسيات" في ذاكرة التخزين المؤقت، ما يعني أنّه لم يعُد هناك حاجة إليه.

إليك طريقة عمل "cache.addAll":

// when the browser sees this SW for the first time
self.addEventListener('install', function(event) {
    // wait until the following promise resolves
    event.waitUntil(
    // open/create a cache named 'mysite-static-v1'
    caches.open('mysite-static-v1').then(function(cache) {
        // fetch and add this stuff to it
        return cache.addAll([
        '/',
        '/css/styles.css',
        '/js/script.js',
        '/imgs/cat-falls-over.gif'
        ]);
    })
    );
});

يحصل addAll على مصفوفة من عناوين URL & ويجلبها ويضيفها إلى ذاكرة التخزين المؤقت. ويسري ذلك على المعاملات، فإذا تعذّر استرجاع أي أو كتابة، تعذُّر العملية بأكملها وإعادة ذاكرة التخزين المؤقت إلى حالتها السابقة. ويكون ذلك مفيدًا على وجه الخصوص لعمليات التثبيت مثل تلك الواردة أعلاه، حيث يُفترَض أن إخفاقًا فرديًا يمثل إخفاقًا عامًا.

يندرج المثال أعلاه ضمن مشغّل الخدمات، ولكن يمكن الوصول إلى واجهة برمجة تطبيقات ذاكرات التخزين المؤقت بشكل كامل من الصفحات أيضًا.

يتوافق متصفّح Firefox مع واجهة برمجة التطبيقات هذه في إصدار المطوِّر الخاص به، وبالتالي سيتم عرضها مع باقي تنفيذ مشغّل الخدمات.

ولكن انتظر، هذا ليس كل شيء، إذ سيتم إدخال المزيد من التحسينات على ذاكرة التخزين المؤقت...

cache.matchAll سنطرحها على Chrome 47

يتيح لك هذا الإجراء الحصول على مطابقات متعدّدة:

caches.open('mysite-static-v1').then(function(cache) {
    return cache.matchAll('/');
}).then(function(responses) {
    // …
});

سيشمل ذلك كلّ المحتوى في mysite-static-v1 الذي يتطابق مع /. تتيح لك ذاكرة التخزين المؤقت توفُّر إدخالات متعددة لكل عنوان URL إذا كانت قابلة للتخزين المؤقت بشكل مستقل، مثلاً إذا كانت تتضمن عناوين Vary مختلفة.

يتيح Firefox ذلك في إصدار المطوِّر من قبل، وبالتالي سيتم عرضه مع بقية إجراءات تنفيذ مشغّل الخدمات.

ستتوفّر خيارات طلبات البحث لذاكرة التخزين المؤقت في Chrome... قريبًا

إليك معالج جلب عادي جدًا:

self.addEventListener('fetch', function(event) {
    event.respondWith(
    caches.match(event.request).then(function(response) {
        return response || fetch(event.request);
    })
    );
});

إذا كان لدينا / مخزَّن مؤقتًا وتلقّينا طلبًا بشأن /، سيتم عرضه من ذاكرة التخزين المؤقت. وإذا تلقّينا طلبًا بشأن /?utm_source=blahblahwhatever لن يتم إرساله من ذاكرة التخزين المؤقت. ويمكنك تفادي ذلك من خلال تجاهل سلسلة البحث عن عنوان URL أثناء مطابقة:

self.addEventListener('fetch', function(event) {
    event.respondWith(
    caches.match(event.request, {
        ignoreSearch: true
    }).then(function(response) {
        return response || fetch(event.request);
    })
    );
});

ستتم الآن مطابقة /?utm_source=blahblahwhatever مع إدخال /. إليك الخيارات الكاملة:

  • ignoreSearch: تجاهل جزء البحث من عنوان URL في كل من وسيطة الطلب والطلبات المخزّنة مؤقتًا
  • ignoreMethod - تجاهل طريقة وسيطة الطلب، بحيث يمكن لطلب POST مطابقة إدخال GET في ذاكرة التخزين المؤقت
  • ignoreVary - تجاهل رأس الاختلاف في الردود المخزّنة مؤقتًا

يتيح متصفّح Firefox ذلك استخدام هذه الميزة حاليًا. أخبر بن كيلي عن مدى روعته في إضافة كل هذا إلى متصفح Firefox.

إذا كنت تريد متابعة تنفيذ Chrome لخيارات طلب البحث في ذاكرة التخزين المؤقت، راجع crbug.com/426309.

ننتظرك في المرة القادمة للاطّلاع على فصل آخر مثير للاهتمام حول "ما تم تنفيذه في واجهة برمجة تطبيقات ذاكرة التخزين المؤقت".