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

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

تثبيت

يحدث التثبيت عندما يُثبِّت المستخدم عامل خدمة أو يُحدِّثه من "سوق 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

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

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

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

وضع السكون وإيقاف التشغيل

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

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

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

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

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

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

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

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

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

الإصدار 120 من Chrome

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

Chrome 118

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

Chrome 116

في الإصدار 116 من Chrome، تمّت إضافة التحسينات التالية على مهام الخدمة:

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

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

الإصدار 114 من Chrome

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

Chrome 110

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

الإصدار 109 من Chrome

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

Chrome 105

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