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

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

تثبيت

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

  1. install (حدث عامل الخدمة)
  2. browser.runtime.onInstalled (حدث إضافي)
  3. activate (حدث عامل الخدمة)

ServiceWorkerRegistration.install

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

browser.runtime.onInstalled

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

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

ServiceWorkerRegistration.active

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

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

عندما يبدأ ملف مستخدم، يتم تشغيل الحدث browser.runtime.onStartup ولكن لا يتم استدعاء أي أحداث لبرنامج عامل الخدمة.

وضع الخمول وإيقاف التشغيل

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

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

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

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

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

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

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

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

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

‫Chrome 120

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

‫Chrome 118

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

Chrome 116

قدّم الإصدار 116 من Chrome التحسينات التالية على مدة بقاء مشغّل الخدمات:

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

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

‫Chrome 114

يؤدي إرسال رسالة باستخدام الرسائل التي تدوم طويلاً إلى إبقاء عامل الخدمة نشطًا. لم يعُد فتح منفذ يؤدي إلى إعادة ضبط المؤقتات.

Chrome 110

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

Chrome 109

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

Chrome 105

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