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

جيك أرشيبالد
جيك أرشيبالد

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

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

لا يمكنني سماعك. لقد قلتُ، هل أنتم مستعدّون لمعرفة معلومات عن التحديثات التي أجريناها على تنفيذ Chrome لواجهة برمجة تطبيقات ذاكرة التخزين المؤقت لعامل الخدمات في Chrome؟

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

وصول 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.

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

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