چرخه عمر کارگر خدمات ترویجی، چرخه عمر کارگر خدمات ترویجی

کارگزاران خدمات توسعه به رویدادهای استاندارد کارگزار خدمات و رویدادهای موجود در فضاهای نام افزونه پاسخ می‌دهند. آن‌ها با هم ارائه می‌شوند زیرا اغلب در طول استفاده از یک افزونه، یک نوع پس از نوع دیگر می‌آید.

نصب

نصب زمانی اتفاق می‌افتد که کاربر یک سرویس ورکر را از فروشگاه وب کروم نصب یا به‌روزرسانی می‌کند یا زمانی که یک افزونه‌ی باز نشده را با استفاده از صفحه‌ی chrome://extensions بارگذاری یا به‌روزرسانی می‌کند . سه رویداد به این ترتیب رخ می‌دهد:

  1. install (رویداد کارگر سرویس)
  2. chrome.runtime.onInstalled (رویداد افزونه)
  3. activate (رویداد سرویس ورکر)

نصب ServiceWorkerRegistration

اولین رویدادی که در حین نصب اجرا می‌شود، رویداد نصب یک وب سرویس ورکر است.

کروم.زمان.روشن نصب شد

مورد بعدی رویداد onInstalled افزونه است که هنگام نصب اولیه افزونه (نه سرویس ورکر) ، هنگام به‌روزرسانی افزونه به نسخه جدید و هنگام به‌روزرسانی کروم به نسخه جدید، اجرا می‌شود. از این رویداد برای تنظیم یک وضعیت یا برای مقداردهی اولیه یک‌باره، مانند منوی زمینه، استفاده کنید.

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

ثبت نام ServiceWorker.active

در نهایت، رویداد activate مربوط به سرویس ورکر اجرا می‌شود. توجه داشته باشید که برخلاف سرویس ورکرهای وب، این رویداد بلافاصله پس از نصب یک افزونه اجرا می‌شود، زیرا در یک افزونه چیزی شبیه به بارگذاری مجدد صفحه وجود ندارد.

راه اندازی افزونه

وقتی یک پروفایل کاربری شروع می‌شود، رویداد chrome.runtime.onStartup اجرا می‌شود اما هیچ رویدادی از سرویس ورکر فراخوانی نمی‌شود.

حالت سکون و خاموشی

معمولاً، کروم زمانی که یکی از شرایط زیر برآورده شود، یک سرویس ورکر را خاتمه می‌دهد:

  • بعد از 30 ثانیه عدم فعالیت. دریافت یک رویداد یا فراخوانی یک رابط برنامه‌نویسی کاربردی افزونه، این تایمر را مجدداً تنظیم می‌کند.
  • وقتی یک درخواست واحد، مانند یک رویداد یا فراخوانی API، بیش از ۵ دقیقه طول بکشد تا پردازش شود.
  • وقتی رسیدن پاسخ fetch() بیش از 30 ثانیه طول می‌کشد.

رویدادها و فراخوانی‌های APIهای افزونه، این تایمرها را مجدداً تنظیم می‌کنند و اگر سرویس ورکر غیرفعال شده باشد، یک رویداد ورودی آنها را دوباره فعال می‌کند. با این وجود، شما باید سرویس ورکر خود را طوری طراحی کنید که در برابر خاتمه غیرمنتظره مقاوم باشد.

برای بهینه‌سازی مصرف منابع افزونه خود، در صورت امکان از فعال نگه داشتن سرویس ورکر خود برای مدت نامحدود خودداری کنید. افزونه‌های خود را آزمایش کنید تا مطمئن شوید که این کار را ناخواسته انجام نمی‌دهید.

داده‌ها را به جای استفاده از متغیرهای سراسری، حفظ کنید

هر متغیر سراسری که تنظیم کنید، در صورت خاموش شدن سرویس ورکر از بین می‌رود. به جای استفاده از متغیرهای سراسری، مقادیر را در حافظه ذخیره‌سازی ذخیره کنید. گزینه‌های شما فهرست شده‌اند.

رابط برنامه‌نویسی کاربردی ذخیره‌سازی کروم
یک API افزونه که انواع مختلفی از ذخیره‌سازی را ارائه می‌دهد؛ محلی، جلسه‌ای، مدیریت‌شده (دامنه) و همگام‌سازی. این API اشیاء JSON را که با کلیدهای تعریف‌شده توسط توسعه‌دهنده شناسایی و بازیابی می‌شوند، ذخیره می‌کند. این نوع ذخیره‌سازی با پاک کردن حافظه پنهان وب توسط کاربر حذف نمی‌شود.
API پایگاه داده ایندکس شده
یک API سطح پایین برای ذخیره‌سازی داده‌های ساختاریافته در سمت کلاینت، شامل فایل‌ها و blobها. این API، ابزارهای اولیه‌ای را برای ایجاد ذخیره‌سازی و بازیابی داده‌های تراکنشی فراهم می‌کند. اگرچه این API اغلب برای برخی موارد استفاده بسیار پیچیده است، تعدادی از راه‌حل‌های ذخیره‌سازی شخص ثالث بر روی آن ساخته شده‌اند.
رابط برنامه‌نویسی کاربردی ذخیره‌سازی کش
یک مکانیزم ذخیره‌سازی پایدار برای جفت‌های شیء درخواست و پاسخ. این API به‌طور خاص برای کارگزاران سرویس وب طراحی شده است و برای بازیابی داده‌ها از یک نقطه پایانی استفاده می‌شود. بسته به اینکه آیا و چقدر مهم است که کاربران داده‌های به‌روز را ببینند، روش‌های مختلفی برای استفاده از این API وجود دارد. برای اطلاعات بیشتر، به کتاب آشپزی آفلاین مراجعه کنید. مگر اینکه به‌طور خاص درخواست‌های شبکه را با استفاده از fetch handler پروکسی کنید، باید chrome.storage استفاده کنید.

حداقل نسخه کروم را انتخاب کنید

از زمان انتشار Manifest V3، ما چندین بهبود در طول عمر سرویس ورکرها ایجاد کرده‌ایم. این بدان معناست که اگر افزونه Manifest V3 شما از نسخه‌های قبلی کروم پشتیبانی می‌کند، شرایطی وجود دارد که باید از آنها آگاه باشید. اگر این شرایط بر افزونه شما تأثیری ندارد، می‌توانید از این بخش عبور کنید. اگر تأثیر دارد، حداقل نسخه کروم را در مانیفست خود مشخص کنید.

کروم ۱۲۰

اکنون می‌توان هشدارها را روی حداقل دوره ۳۰ ثانیه تنظیم کرد تا با چرخه عمر سرویس ورکرها مطابقت داشته باشد. برای جزئیات بیشتر به chrome.alarms مراجعه کنید.

کروم ۱۱۸

جلسات اشکال‌زدایی فعال ایجاد شده با استفاده از API chrome.debugger اکنون سرویس ورکر را فعال نگه می‌دارند. این امر مانع از اتمام زمان‌بندی سرویس ورکرها در طول فراخوانی‌های این API می‌شود.

کروم ۱۱۶

کروم ۱۱۶ بهبودهای زیر را در طول عمر سرویس ورکرها معرفی کرد:

  • اتصالات فعال WebSocket اکنون طول عمر سرویس‌دهنده‌ی افزونه را افزایش می‌دهند. ارسال یا دریافت پیام‌ها از طریق یک WebSocket در یک سرویس‌دهنده‌ی افزونه، تایمر بیکاری سرویس‌دهنده را مجدداً تنظیم می‌کند.

  • APIهای افزونه‌های اضافی مجاز به عبور از دوره زمانی پنج دقیقه‌ای برای کارکنان خدمات افزونه هستند. این APIها یک اعلان کاربر نمایش می‌دهند و بنابراین ممکن است به طور منطقی بیش از پنج دقیقه طول بکشد تا برطرف شوند. این موارد شامل desktopCapture.chooseDesktopMedia() ، identity.launchWebAuthFlow() ، management.uninstall() و permissions.request() .

کروم ۱۱۴

ارسال پیام با پیام‌رسانی طولانی‌مدت، سرویس ورکر را زنده نگه می‌دارد. باز کردن یک پورت دیگر تایمرها را ریست نمی‌کند.

کروم ۱۱۰

فراخوانی‌های API افزونه، تایمرها را ریست می‌کنند. قبل از این، فقط اجرای کنترل‌کننده‌های رویداد، یک سرویس ورکر را فعال نگه می‌داشت. هر رویدادی که در صف قرار داشت، اما برای آن یک کنترل‌کننده فراخوانی نشده بود، باعث ریست نمی‌شد.

کروم ۱۰۹

پیام‌های ارسالی از یک سند خارج از صفحه، تایمرها را مجدداً تنظیم می‌کنند.

کروم ۱۰۵

اتصال به یک میزبان پیام‌رسانی بومی با استفاده از chrome.runtime.connectNative() یک سرویس ورکر را فعال نگه می‌دارد. اگر فرآیند میزبان از کار بیفتد یا خاموش شود، پورت بسته می‌شود و سرویس ورکر پس از اتمام تایمرها خاتمه می‌یابد. با فراخوانی chrome.runtime.connectNative() ‎ در کنترل‌کننده رویداد onDisconnect پورت، از این امر جلوگیری کنید.