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

برندان كيني
برندان كيني

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

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

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

واجهة برمجة تطبيقات التوجيه الثابت لـ Service Worker

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

في الإصدار الأولي من واجهة برمجة التطبيقات، يمكن الإعلان عن عرض المسارات دائمًا من الشبكة، وليس من مشغّل الخدمات. وعند تحميل عنوان 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، تهدف هذه الإعدادات إلى أن تصبح هذه الإعدادات أكثر مرونة وتتوافق مع المزيد من السيناريوهات، مثل تسريع عملية جلب الشبكة وبدء تشغيل مشغّل الخدمات. يمكنك الاطّلاع على استكشاف المواصفات التوضيحية "للشكل النهائي" المحتمل لواجهة برمجة التطبيقات للحصول على مزيد من التفاصيل.

تجربة واجهة برمجة التطبيقات للتوجيه الثابت لـ Service Worker

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

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

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

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