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

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

تثبيت

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

ServiceWorkerRegistration.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 API
واجهة برمجة تطبيقات منخفضة المستوى لتخزين البيانات المنظَّمة من جهة العميل، بما في ذلك الملفات والنصوص الثنائية الكبيرة (BLOB). توفّر واجهة برمجة التطبيقات هذه عناصر أساسية لإنشاء عمليات تخزين واسترجاع البيانات المعاملات. على الرغم من أنّ واجهة برمجة التطبيقات هذه غالبًا ما تكون معقّدة جدًا لحالات الاستخدام البسيطة، يتم إنشاء عدد من حلول التخزين التابعة لجهات خارجية استنادًا إليها.
cacheStorage API
آلية تخزين دائمة لزوجَي عنصرَي الطلب والاستجابة تم تصميم واجهة برمجة التطبيقات هذه خصيصًا للعاملين في خدمات الويب، وتُستخدم لاسترداد البيانات من نقطة نهاية. هناك مجموعة متنوعة من طرق استخدام واجهة برمجة التطبيقات هذه، وذلك استنادًا إلى مدى أهمية ظهور بيانات محدّثة للمستخدمين. لمزيد من المعلومات، يُرجى الاطّلاع على دليل إعداد المحتوى بلا إنترنت. يجب استخدام chrome.storage ما لم تكن تستخدم خادمًا وكيلاً لطلبات الشبكة عبر معالج الجلب.

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

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

الإصدار 120 من Chrome

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

Chrome 118

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

Chrome 116

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

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

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

الإصدار 114 من Chrome

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

Chrome 110

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

الإصدار 109 من Chrome

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

Chrome 105

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