کارگران خدمات توسعه اکنون می توانند تا زمانی که رویدادها را دریافت می کنند زنده بمانند. این امر قابلیت اطمینان کارکنان خدمات ترویجی را افزایش می دهد، اما یک دام دارد که باید از آن اجتناب کنید.
از Chrome 110 (در نسخه بتا از 7 فوریه 2023)، کارکنان خدمات برنامه افزودنی تا زمانی که رویدادها را دریافت می کنند زنده می مانند. این یک مشکل زمانبندی را در اجرای قبلی کارگران خدمات ترویجی تصحیح میکند. ممکن بود زمانی که رویدادهای جدید در صف رویداد هستند، مهلت زمانی رخ دهد و کارهای ناهمزمان کوتاه شود. این بهبود حداکثر طول عمر پنج دقیقه ای سخت را برای کارکنان خدمات توسعه حذف می کند.
این مقاله چگونگی تغییر این رفتارها را توضیح می دهد.
زمینه
کارکنان خدمات توسعه بیشتر مانند کارگران خدمات وب رفتار می کنند، اما علاوه بر رویدادهای کارگر خدمات ، کارکنان خدمات توسعه همچنین می توانند به رویدادهای برنامه افزودنی گوش دهند. در حالی که رویدادهای معمولی سرویسدهنده عمر کارمند خدمات را افزایش میدهد، قبل از انتشار 110، تنها چند رویداد پلتفرم برنامهنویسی، یک کارگر خدمات افزودنی را زنده نگه میداشت.
به طور معمول، Chromium پس از برآورده شدن یکی از شرایط زیر، یک سرویس دهنده را خاتمه می دهد:
- کارگر خدماتی بیش از سی ثانیه رویدادی دریافت نکرده است و هیچ کار طولانی مدت برجسته ای در حال انجام نیست. اگر یک سرویسدهنده رویدادی را در این مدت دریافت کرد، تایمر بیکار حذف شد.
- یک کار طولانی مدت بیش از پنج دقیقه طول کشیده است و هیچ رویدادی در سی ثانیه گذشته دریافت نشده است.
رویدادهای جدید سرویسکار که قبل از انقضای تایمر بیکار یا تایمر طولانی کار دریافت میشوند، تایمرها را بازنشانی کرده و طول عمر کارگر سرویس را افزایش میدهد.
متأسفانه، این رفتار برای رویدادهای برنامه افزودنی اعمال نشد. رویدادهای برنامه افزودنی میتواند یک کارگر خدمات افزودنی را بیدار کند و آن را تا پایان رویداد زنده نگه دارد، اما نمیتواند تایمر بیکار سی ثانیه را افزایش دهد. این در واقع به این معنی بود که کارکنان خدمات برنامههای افزودنی میتوانند در هر زمانی پس از تکمیل آخرین رویداد برنامه افزودنی خاتمه داده شوند، حتی اگر مرورگر به تازگی رویداد جدیدی را به برنامه افزودنی ارسال کرده باشد.
چه چیزی تغییر کرده است
از Chrome 110، همه رویدادها تایمر بیحرکتی را بازنشانی میکنند و در صورت وجود رویدادهای معلق، مهلت زمانی بیحرکتی رخ نمیدهد. به عبارت دیگر، با فرض اینکه هیچ وقفه غیرمنتظرهای وجود نداشته باشد، کارگران خدمات توسعه معمولاً تا زمانی که به طور فعال رویدادها را پردازش میکنند زنده میمانند. علاوه بر این، فراخوانیها به برنامههای افزودنی API خاص Chrome، مانند chrome.storage.local.get()
زمان بیحرکتی را بازنشانی میکنند. به طور مشخص:
- کارگر خدمات پس از 30 ثانیه عدم فعالیت کار را متوقف می کند. (دریافت یک رویداد یا فراخوانی یک برنامه افزودنی API این تایمر را بازنشانی می کند).
- اگر پردازش یک درخواست، مانند یک رویداد یا تماس API، بیش از 5 دقیقه طول بکشد، سرویسکار خاتمه مییابد.
برخی از APIها مانند پیامرسانی بومی، نگهداری قوی را ارائه میکنند که هر دوی این تایمرها را لغو میکند.
ما همچنان در حال کار هستیم تا اطمینان حاصل کنیم که کارکنان خدمات ترویجی در صورت امکان، بدون تعطیل کردن کار طولانی مدت، خاتمه می یابند. کارکنان خدمات ترویجی آگاه به منابع همیشه باید در صورت امکان تسلیم شوند. علاوه بر این، برنامههای افزودنی باید برای خاتمه غیرمنتظره با وضعیت پایدار آماده شوند. این کار از رویدادهای غیرقابل پیش بینی مانند بسته شدن اجباری مرورگر توسط کاربر محافظت می کند.
عکس پائولا گوئریرو در Unsplash