تستجيب خدمات تطبيقات الويب الإضافية لكلٍّ من أحداث خدمات تطبيقات الويب العادية والأحداث في مساحات أسماء تطبيقات الويب الإضافية. ويتم عرضهما معًا لأنّ أحدهما غالبًا ما يتبع الآخر أثناء استخدام الإضافة.
تثبيت
يحدث التثبيت عندما يُثبِّت المستخدم عامل خدمة أو يُحدِّثه من "سوق 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 للمنفذ.