دورة حياة مشغّل خدمات الإضافات

يستجيب عاملو خدمات الإضافات لكل من أحداث مشغّلي الخدمات العادية والأحداث في مساحات اسم الإضافات. ويتم تقديمها معًا لأنه غالبًا ما يتبع أحد الأنواع نوعًا آخر أثناء استخدام الإضافة.

تثبيت

يحدث التثبيت عندما يثبِّت المستخدم أحد مشغِّلي الخدمات أو يحدِّثه من "سوق Chrome الإلكتروني"، أو عند تحميل إضافة غير مضغوطة أو تحديثها باستخدام صفحة chrome://extensions. تقع ثلاثة أحداث بالترتيب أدناه.

ServiceWorkerRegistration.install

الحدث الأول الذي يتم تنشيطه أثناء التثبيت هو حدث install لعامل خدمات الويب.

chrome.runtime.onInstalled

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

chrome.runtime.onInstalled.addListener((details) => {
  if(details.reason !== "install" && details.reason !== "update") return;
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

ServiceWorkerRegistration.active

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

بدء تشغيل الإضافة

عند بدء الملف الشخصي للمستخدم، يتم تنشيط حدث chrome.runtime.onStartup ولكن لا يتم استدعاء أي أحداث مشغّل خدمات.

وضع الخمول والإيقاف

عادةً ما ينهي Chrome مشغّل الخدمات عند استيفاء أحد الشروط التالية:

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

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

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

الاحتفاظ بالبيانات بدلاً من استخدام المتغيرات العمومية

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

واجهة برمجة تطبيقات chrome.storage
واجهة برمجة تطبيقات إضافة توفر أنواعًا متعددة من مساحة التخزين: التخزين المحلي والجلسة والمدار (النطاق) والمزامنة. تخزِّن واجهة برمجة التطبيقات هذه كائنات JSON التي تم تحديدها واستردادها باستخدام المفاتيح التي يحدّدها المطوّر. ولن تتم إزالة هذا النوع من مساحة التخزين عندما يمحو أحد المستخدمين ذاكرة التخزين المؤقت للويب.
واجهة برمجة تطبيقات IndexedDB
واجهة برمجة تطبيقات منخفضة المستوى لتخزين البيانات المنظَّمة من جهة العميل، بما في ذلك الملفات والكائنات الثنائية الكبيرة توفر واجهة برمجة التطبيقات هذه أساسيات لإنشاء تخزين البيانات المتعلقة بالمعاملات واستردادها. على الرغم من أنّ واجهة برمجة التطبيقات هذه غالبًا ما تكون معقدة للغاية بالنسبة إلى حالات الاستخدام البسيطة، يتم إنشاء عدد من حلول مساحة التخزين التابعة لجهات خارجية فوقها.
CacheStorage API
آلية تخزين دائمة لأزواج عناصر الطلب والاستجابة. تم تصميم واجهة برمجة التطبيقات هذه خصيصًا للعاملين في خدمة الويب ويتم استخدامها لاسترداد البيانات من نقطة نهاية. تتوفّر عدة طرق لاستخدام واجهة برمجة التطبيقات هذه وفقًا لما إذا كان من الضروري الاطّلاع على بيانات محدّثة للمستخدمين ومدى أهمية الاطّلاع عليها. لمزيد من المعلومات، راجع كتاب الطبخ بلا إنترنت. عليك استخدام chrome.storage، ما لم يتم إنشاء خوادم وكيلة لطلبات الشبكة تحديدًا من خلال معالج الجلب.

اختيار الحد الأدنى لإصدار Chrome

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

Chrome 120

يمكن الآن ضبط المنبّهات على 30 ثانية على الأقلّ لتتوافق مع مراحل نشاط عامل الخدمة. يمكنك الاطّلاع على chrome.alarms للحصول على مزيد من التفاصيل.

Chrome 118

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

الإصدار 116 من Chrome

طرح Chrome 116 التحسينات التالية الدائمة لمشغّلي الخدمات:

  • أصبحت اتصالات WebSocket النشطة الآن تعمل على تمديد فترات عمل مشغّلي خدمات الإضافات. يؤدي إرسال الرسائل أو تلقّيها من خلال WebSocket في أحد مشغّلي خدمات الإضافات إلى إعادة ضبط موقّت وضع عدم النشاط لدى مشغّل الخدمة.

  • يتم السماح لواجهات برمجة التطبيقات الإضافية للإضافة بتجاوز فترة المهلة التي تبلغ خمس دقائق للعاملين في خدمة الإضافات. تعرض واجهات برمجة التطبيقات هذه رسالة طلب من المستخدم، وبالتالي قد يستغرق حلّها أكثر من خمس دقائق بشكل معقول. ويشمل ذلك desktopCapture.chooseDesktopMedia() وidentity.launchWebAuthFlow() وmanagement.uninstall() وpermissions.request().

Chrome 114

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

Chrome 110

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

Chrome 109

تتم إعادة ضبط الموقّتات في الرسائل المُرسَلة من مستند خارج الشاشة.

Chrome 105

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