تستجيب برامج العاملين في الخدمة للإضافات لكل من أحداث برامج العاملين في الخدمة العادية والأحداث في مساحات أسماء الإضافات. يتم عرضها معًا لأنّ أحد الأنواع غالبًا ما يتبع نوعًا آخر أثناء استخدام الإضافة.
تثبيت
يحدث التثبيت عندما يثبّت المستخدم عامل خدمة أو يحدّثه من "سوق Chrome الإلكتروني" أو عندما يحمّل إضافة غير مضغوطة أو يحدّثها باستخدام صفحة chrome://extensions
. تحدث ثلاثة أحداث بالترتيب التالي:
install
onInstall
activate
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 في مشغّل الخدمات. يُرجى العِلم أنّه على عكس مشغّلي الخدمات على الويب، يتم تشغيل هذا الحدث فور تثبيت إضافة لأنّه لا يوجد ما يشبه إعادة تحميل الصفحة في الإضافة.
بدء تشغيل الإضافة
عندما يبدأ ملف مستخدم، يتم تشغيل الحدث chrome.runtime.onStartup
ولكن لا يتم استدعاء أي أحداث لبرنامج الخدمة.
عدم النشاط وإيقاف التشغيل
عادةً ما يوقف Chrome عامل الخدمة عند استيفاء أحد الشروط التالية:
- بعد مرور 30 ثانية من عدم النشاط تؤدي عملية تلقّي حدث أو استدعاء واجهة برمجة تطبيقات لإضافة وظائف إلى إعادة ضبط هذا المؤقت.
- عندما يستغرق طلب واحد، مثل حدث أو طلب بيانات من واجهة برمجة التطبيقات، أكثر من 5 دقائق للمعالجة
- عندما يستغرق وصول ردّ
fetch()
أكثر من 30 ثانية
تؤدي الأحداث والمكالمات إلى واجهات برمجة التطبيقات الإضافية إلى إعادة ضبط هذه المؤقتات، وإذا كان عامل الخدمة غير نشط، سيؤدي حدث وارد إلى إعادة تنشيطه. ومع ذلك، يجب تصميم مشغّل الخدمات ليكون مرنًا في مواجهة الإنهاء غير المتوقّع.
لتحسين استهلاك الموارد في الإضافة، تجنَّب إبقاء عامل الخدمة نشطًا إلى أجل غير مسمى إذا أمكن ذلك. اختبِر الإضافات للتأكّد من أنّك لا تفعل ذلك عن غير قصد.
الاحتفاظ بالبيانات بدلاً من استخدام المتغيّرات العامة
سيتم فقدان أي متغيرات عامة ضبطتها إذا تم إيقاف عامل الخدمة. بدلاً من استخدام المتغيرات العامة، احفظ القيم في مساحة التخزين. سيتم عرض الخيارات المتاحة لك.
- chrome.storage API
- واجهة برمجة تطبيقات إضافة توفّر أنواعًا متعددة من مساحة التخزين، مثل مساحة التخزين المحلية ومساحة تخزين الجلسة ومساحة التخزين المُدارة (النطاق) ومساحة التخزين المتزامنة. تخزّن واجهة برمجة التطبيقات هذه عناصر JSON التي يتم تحديدها واستردادها باستخدام مفاتيح يحدّدها المطوّر. لن تتم إزالة هذا النوع من التخزين عندما يمحو المستخدم ذاكرة التخزين المؤقت على الويب.
- IndexedDB API
- واجهة برمجة تطبيقات منخفضة المستوى لتخزين البيانات المنظَّمة من جهة العميل، بما في ذلك الملفات والكائنات الثنائية الكبيرة توفّر واجهة برمجة التطبيقات هذه عناصر أساسية لإنشاء مساحة تخزين بيانات المعاملات واستردادها. على الرغم من أنّ واجهة برمجة التطبيقات هذه غالبًا ما تكون معقّدة جدًا بالنسبة إلى بعض حالات الاستخدام، تم إنشاء عدد من حلول التخزين التابعة لجهات خارجية استنادًا إليها.
- CacheStorage API
- آلية تخزين ثابتة لأزواج عناصر الطلبات والاستجابات تم تصميم واجهة برمجة التطبيقات هذه خصيصًا لبرامج الخدمة على الويب، ويتم استخدامها لاسترداد البيانات من نقطة نهاية. تتوفّر مجموعة متنوعة من الطرق لاستخدام واجهة برمجة التطبيقات هذه، وذلك حسب مدى أهمية أن يرى المستخدمون بيانات حديثة. لمزيد من المعلومات، راجِع The Offline Cookbook. ما لم تكن بصدد توجيه طلبات الشبكة باستخدام معالج fetch، عليك استخدام
chrome.storage
.
اختيار الحدّ الأدنى لإصدار Chrome
منذ إطلاق الإصدار 3 من ملف البيان، أجرينا العديد من التحسينات على مدة بقاء عاملي الخدمة. وهذا يعني أنّه إذا كانت إضافة Manifest V3 متوافقة مع إصدارات Chrome السابقة، هناك شروط يجب أن تكون على دراية بها. إذا لم تؤثّر هذه الشروط في إضافتك، يمكنك الانتقال من هذا القسم. إذا كان الأمر كذلك، ننصحك بتحديد الحد الأدنى لإصدار Chrome في ملف البيان.
Chrome 120
يمكن الآن ضبط المنبّهات على مدة لا تقل عن 30 ثانية لتتوافق مع دورة حياة عامل الخدمة. لمزيد من التفاصيل، يمكنك الاطّلاع على chrome.alarms
.
Chrome 118
تُبقي جلسات تصحيح الأخطاء النشطة التي تم إنشاؤها باستخدام واجهة برمجة التطبيقات chrome.debugger
على عامل الخدمة نشطًا. يمنع ذلك انتهاء مهلة عاملي الخدمة أثناء طلبات البيانات من واجهة برمجة التطبيقات هذه.
Chrome 116
قدّمت الإصدار 116 من Chrome تحسينات على مدة بقاء عامل الخدمة على النحو التالي:
تؤدي عمليات الربط النشطة
WebSocket
الآن إلى إطالة مدة بقاء عاملي الخدمة في الإضافة. يؤدي إرسال الرسائل أو تلقّيها عبرWebSocket
في عامل خدمة إضافة إلى إعادة ضبط مؤقّت عدم النشاط الخاص بعامل الخدمة.يُسمح لواجهات برمجة تطبيقات الإضافات الإضافية بتجاوز فترة المهلة البالغة خمس دقائق لبرامج الخدمة الخاصة بالإضافات. تعرض واجهات برمجة التطبيقات هذه طلبًا من المستخدم، وبالتالي قد يستغرق حلّها وقتًا أطول من خمس دقائق. وتشمل هذه المناطق
desktopCapture.chooseDesktopMedia()
وidentity.launchWebAuthFlow()
وmanagement.uninstall()
وpermissions.request()
.
Chrome 114
يؤدي إرسال رسالة باستخدام الرسائل التي تدوم طويلاً إلى إبقاء عامل الخدمة نشطًا. لم يعُد فتح منفذ يؤدي إلى إعادة ضبط المؤقتات.
Chrome 110
تؤدي طلبات البيانات من واجهة برمجة التطبيقات الخاصة بالإضافات إلى إعادة ضبط الموقّتات. قبل ذلك، كانت معالجات الأحداث التي يتم تشغيلها فقط هي التي تحافظ على نشاط عامل الخدمة. لن تؤدي أي أحداث تم وضعها في قائمة الانتظار، ولكن لم يتم استدعاء معالج لها، إلى إعادة الضبط.
Chrome 109
تؤدي الرسائل المُرسَلة من مستند غير معروض على الشاشة إلى إعادة ضبط المؤقتات.
Chrome 105
سيؤدي الاتصال بمضيف المراسلة الأصلية باستخدام chrome.runtime.connectNative()
إلى إبقاء عامل الخدمة نشطًا. في حال تعطُّل عملية المضيف أو إيقافها، يتم إغلاق المنفذ وسيتم إنهاء عامل الخدمة بعد اكتمال المؤقتات. يمكنك الحماية من ذلك من خلال استدعاء chrome.runtime.connectNative()
في معالج أحداث onDisconnect للمنفذ.