انتظارات در مورد استقرار کارکنان خدمات

استقرار یک کارگر خدماتی ممکن است رفتارهای وب سایت را به روش های پیش بینی نشده تغییر دهد. از آنجایی که Workbox نوشتن و استقرار یک سرویس‌کار را آسان می‌کند، از دست دادن برخی از تأثیراتی که یک سرویس‌کار روی یک وب‌سایت پس از استقرار دارد آسان‌تر است.

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

پیش گیر کردن دام ها

Precaching قبلاً در این اسناد پوشش داده شده است بدون اینکه به طور کامل نحوه عملکرد معکوس را پوشش دهد. در صورت اعمال پیش کش برای دارایی های بسیار زیاد، یا اگر سرویس دهنده قبل از اینکه صفحه فرصتی برای بارگیری دارایی های حیاتی داشته باشد، ثبت نام کرده باشد، ممکن است با مشکل مواجه شوید.

از آنجایی که رفتار پیش‌فرض workbox-webpack-plugin این است که به کارگر سرویس دستور دهد تا دارایی‌های تولید شده را به‌طور خودکار پیش کش کند، این می‌تواند مشکل‌ساز باشد به نحوی که به راحتی از دست می‌رود، زیرا مانع پذیرش کم است.

خروجی ترمینال
خروجی ترمینال از workbox-webpack-plugin. در این مثال، 14 دارایی را در پروژه فعلی که مجموعاً 352 کیلوبایت است به طور پیش فرض پیش کش می کند.

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

این همه در زمان بندی است

اگر یک کارگر خدماتی چیزی را پیش کش کند، زمان ثبت آن مهم است. کارگران خدمات اغلب با استفاده از عناصر <script> درون خطی ثبت می شوند. این به این معنی است که تجزیه‌کننده‌های HTML ممکن است قبل از بارگیری دارایی‌های حیاتی صفحه، کد ثبت نام کارکنان خدمات را پیدا کنند.

این یک مشکل است. یک کارگر خدماتی در حالت ایده آل باید در بدترین موارد نسبت به عملکرد خنثی باشد، نه اینکه عملکرد را بدتر کند. به کاربران لطف کنید و وقتی رویداد load صفحه فعال شد، یک سرویس دهنده ثبت نام کنید . این احتمال تداخل پیش کش در بارگیری دارایی های حیاتی صفحه را کاهش می دهد، که به نوبه خود به این معنی است که صفحه می تواند سریعتر تعامل داشته باشد بدون اینکه نیازی به مقابله با درخواست های شبکه برای دارایی هایی باشد که ممکن است تا بعداً به آنها نیاز نباشد.

به مصرف داده توجه داشته باشید

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

داده های هدر رفته یک مبادله بالقوه پیش کش است، اما همه به اینترنت سریع یا حتی برنامه های داده نامحدود دسترسی ندارند! هنگام پیش کش کردن، حذف دارایی های بزرگ را در نظر بگیرید و به جای ایجاد فرضیات پرهزینه، به ذخیره سازی در زمان اجرا برای گرفتن آنها تکیه کنید.

راه اندازی سرویس کارگر می تواند درخواست های شبکه را به تاخیر بیندازد

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

هنگام استفاده از استراتژی‌هایی که نمی‌توانند از حافظه پنهان استفاده کنند، و باید به شبکه بروند - به‌ویژه هنگام رسیدگی به درخواست‌های ناوبری - زمان راه‌اندازی همیشه مقداری تأخیر اضافه می‌کند . بسته به قابلیت‌های دستگاه و/یا فشار CPU، درخواست ناوبری می‌تواند با تاخیر قابل توجهی به دلیل راه‌اندازی آهسته سرویس‌دهنده مواجه شود. استقرار یک سرویس دهنده بدون آگاهی از این تاخیر به این معنی است که کاربران ممکن است یک ضربه عملکرد ناخواسته را تجربه کنند.

این مشکل با پیش بارگذاری ناوبری حل شده است، اما هنوز در همه مرورگرها پشتیبانی نمی شود . با این حال، استفاده از آن ارزش بررسی دارد و بعداً در این مستندات به آن پرداخته می شود.

استراتژی‌های Cache-first می‌توانند نتیجه معکوس داشته باشند

استراتژی‌های ذخیره‌سازی که ابتدا با حافظه پنهان مشورت می‌کنند - یا فقط با کش مشورت می‌کنند - هم برای دسترسی آفلاین و هم برای عملکرد عالی هستند. با این حال، آنها تمایل دارند در برخی موارد منتخب مشکلاتی را ایجاد کنند.

ذخیره سازی در زمان اجرا دارایی های استاتیک بدون نسخه

بسته‌کننده‌ها معمولاً دارایی‌های استاتیک را با هش مبتنی بر محتوا در نام فایل نسخه می‌دهند (به عنوان مثال styles.a4edf38c.css ). در سرویس‌کارانی که از استراتژی‌های ذخیره‌سازی استفاده می‌کنند که ابتدا از حافظه پنهان برای دارایی‌های ایستا استفاده می‌کنند، و از استراتژی شبکه اول برای نشانه‌گذاری صفحه استفاده می‌کنند، نباید مشکلات مربوط به کش وجود داشته باشد زیرا دارایی‌های به‌روزرسانی شده در نشانه‌گذاری که همیشه از شبکه بازیابی می‌شود، ارجاع می‌شوند.

مشکلات در شرایطی به وجود می‌آیند که دارایی‌های استاتیک بدون نسخه در طول زمان اجرا با استفاده از این استراتژی‌ها ذخیره می‌شوند. اگر عملکرد یک وب‌سایت توسط app.js ارائه شود و از یک استراتژی زمان اجرای اول در حافظه پنهان استفاده شود، سپس app.js بعداً بدون تغییر در نام فایل به‌روزرسانی می‌شود، نسخه اولیه ذخیره‌شده به جای به‌روزرسانی، از حافظه پنهان ارائه می‌شود.

راه حل این است که از استراتژی استفاده کنید که با شبکه برای به روز رسانی مشورت می کند، مانند شبکه-اول یا قدیمی-در حالی که- اعتبار مجدد. از طرف دیگر، ابزارهای ساخت می توانند یک مانیفست پیش کش برای آن دارایی ها ایجاد کنند، زیرا منطق پیش کش Workbox آنها را به روز نگه می دارد.

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

سهمیه ذخیره سازی ذهن

معمول است که هر از چند گاهی به‌روزرسانی‌های Service Worker ارائه شوند، و زمانی که به‌روزرسانی‌ها منتشر می‌شوند، حافظه‌های پنهان قدیمی با نام‌های منقضی شده معمولاً در طول فعال‌سازی سرویس‌کار جدید حذف می‌شوند.

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

Workbox کار خوبی برای کاهش این مشکلات انجام می دهد، اما هنوز هم می توان از سهمیه های ذخیره سازی فراتر رفت. با ماژول Workbox-Expiration می توانید به کنترل دقیق تری از حافظه پنهان دست یابید.

ترس نداشته باش

اعزام نیروی خدماتی چیز کمی نیست. با این حال، با کمی برنامه ریزی و توجه به آنچه مستقر کردن یک کارگر خدمات با Workbox مستلزم آن است، نباید یک شاهکار ترسناک باشد. همانطور که ادامه می دهید، این مستندات به شما کمک می کند تا با دقت و اطمینان به این نگرانی ها رسیدگی کنید.