النسخة التجريبية من واجهة برمجة تطبيقات التوجيه الثابت لمشغّل الخدمة

Brendan Kenny
Brendan Kenny

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

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

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

واجهة برمجة تطبيقات التوجيه الثابت لمشغّل الخدمات

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

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

لاستخدام واجهة برمجة التطبيقات، يطلب عامل الخدمة event.registerRouter في الحدث install باستخدام مجموعة من القواعد:

self.addEventListener('install', event => {
  if (event.registerRouter) {
    // Go straight to the network and bypass invoking "fetch" handlers for all
    // same-origin URLs that start with '/form/'.
    event.registerRouter([{
      condition: {
        urlPattern: {pathname: '/form/*'},
      },
      source: 'network',
    }]);
  }
});

لكل قاعدة بشكل عام خاصيتان:

  • condition: تحدّد الحالات التي تنطبق فيها القاعدة باستخدام واجهة برمجة تطبيقات نمط عنوان URL لمطابقة مسارات الموارد. يمكن أن تستخدم السمة مثيل URLPattern أو الكائن العادي المكافئ المتوافق مع دالة الإنشاء URLPattern (على سبيل المثال، new URLPattern({pathname: '*.jpg'}) أو {pathname: '*.jpg'} فقط).

    تعني مرونة أنماط عناوين URL أن القاعدة يمكنها أن تطابق شيئًا بسيطًا مثل أي مورد أسفل المسار مع شروط محددة وتفصيلية للغاية. يجب أن تكون الأنماط مألوفة بشكل عام لمستخدمي مكتبات التوجيه الشائعة.

  • source: تحدّد كيفية تحميل الموارد المطابقة لـ condition. في الوقت الحالي، لا يمكن استخدام سوى القيمة 'network' (متجاوزًا عامل الخدمة لتحميل المورد عبر الشبكة مباشرةً)، ولكن الخطة هي توسيع نطاق هذه القيمة لتشمل قيم أخرى في المستقبل.

حالات الاستخدام

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

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

وعلى النقيض من ذلك، تتجاوز واجهة برمجة التطبيقات للتوجيه الثابت عامل الخدمة تمامًا من خلال بضعة أسطر توضيحية:

self.addEventListener('install', event => {
  if (event.registerRouter) {
    event.registerRouter([{
      condition: {
        urlPattern: {pathname: '/feeds/*.xml'},
      },
      source: 'network',
    }, {
      condition: {
        urlPattern: {pathname: '/archives/*'},
      },
      source: 'network',
    }]);
  }
});

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

تجربة واجهة برمجة تطبيقات التوجيه الثابت لمشغّل الخدمات

تتوفّر واجهة برمجة التطبيقات Service Worker Static Route API على متصفِّح Chrome بدايةً من الإصدار 116 بعد فترة تجريبية للمصدر، ما يتيح للمطوّرين اختبار واجهة برمجة التطبيقات على مواقعهم الإلكترونية مع مستخدمين حقيقيين لقياس التأثير. راجِع مقالة بدء استخدام مراحل التجربة والتقييم للحصول على معلومات أساسية حول مراحل التجربة والتقييم.

لإجراء الاختبارات المحلية، يمكن تفعيل واجهة برمجة تطبيقات التوجيه الثابت لمشغّل الخدمات باستخدام علامة على chrome://flags/#service-worker-static-router أو من خلال تشغيل Chrome من الأمر، مثل --enable-features=ServiceWorkerStaticRouter.

الملاحظات والاتجاهات المستقبلية

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