كيف يمكن لمشغّلات الويب ومشغّلات الخدمات تحسين أداء موقعك الإلكتروني، ومتى يجب استخدام مشغّل ويب بدلاً من مشغّل خدمات
توضّح هذه النظرة العامة كيف يمكن للعاملين على الويب والعاملين في الخدمة تحسين أداء موقعك الإلكتروني، ومتى يجب استخدام عامل على الويب مقابل عامل في الخدمة. يمكنك الاطّلاع على بقية هذه السلسلة للتعرّف على أنماط محددة للتواصل بين النوافذ وخدمات العاملين.
كيف يمكن للعاملين تحسين موقعك الإلكتروني؟
يستخدم المتصفّح سلسلة محادثات واحدة (سلسلة المحادثات الرئيسية) لتشغيل كل JavaScript في صفحة ويب، بالإضافة إلى تنفيذ مهام مثل عرض الصفحة وتنفيذ عملية جمع البيانات غير الضرورية. يمكن أن يؤدي تنفيذ رمز JavaScript مفرط إلى حظر سلسلة المحادثات الرئيسية، ما يؤدي إلى تأخير المتصفّح في تنفيذ هذه المهام وترك انطباع سيئ لدى المستخدم.
في تطوير تطبيقات iOS/Android، هناك نمط شائع لضمان بقاء سلسلة التعليمات الرئيسية للتطبيق متاحة للاستجابة لأحداث المستخدمين، وهو نقل العمليات إلى سلاسل تعليمات إضافية. في الواقع، في أحدث إصدارات Android، يؤدي حظر سلسلة التعليمات الرئيسية لفترة طويلة جدًا إلى تعطُّل التطبيق.
على الويب، تم تصميم JavaScript حول مفهوم سلسلة محادثات واحدة، ولا تتوفّر فيها الإمكانات اللازمة لتنفيذ نموذج سلاسل محادثات متعددة مثل النموذج الذي تستخدمه التطبيقات، مثل الذاكرة المشتركة.
على الرغم من هذه القيود، يمكن تحقيق نمط مشابه على الويب باستخدام العاملين لتشغيل البرامج النصية في سلاسل الخلفية، ما يسمح لهم بتنفيذ المهام بدون التدخل في السلسلة الرئيسية. العاملون هم نطاق JavaScript كامل يعمل على سلسلة محادثات منفصلة، بدون أي ذاكرة مشتركة.
في هذه المشاركة، ستتعرّف على نوعَين مختلفَين من العاملين (العاملون على الويب والعاملون في الخدمة)، وأوجه التشابه والاختلاف بينهما، والأنماط الأكثر شيوعًا لاستخدامهما في المواقع الإلكترونية المباشرة.

مشغّلو الخدمات وعمال الويب
أوجه التشابه
مشغّلات الويب ومشغّلات الخدمات هما نوعان من المشغّلات المتاحة للمواقع الإلكترونية. تتشارك هذه الأساليب في بعض الجوانب:
- يعمل كلاهما في سلسلة ثانوية، ما يسمح بتنفيذ رمز JavaScript بدون حظر السلسلة الرئيسية وواجهة المستخدم.
- ولا يمكنهم الوصول إلى العنصرَين
Window
وDocument
، وبالتالي لا يمكنهم التفاعل مع نموذج المستند (DOM) مباشرةً، كما أنّ إمكانية وصولهم إلى واجهات برمجة التطبيقات في المتصفح محدودة.
أوجه الاختلاف
قد يعتقد البعض أنّ معظم المهام التي يمكن تفويضها إلى عامل ويب يمكن تنفيذها في عامل خدمة والعكس صحيح، ولكن هناك اختلافات مهمة بينهما:
- على عكس برامج Web Workers، تتيح لك برامج Service Workers اعتراض طلبات الشبكة (من خلال حدث
fetch
) والاستماع إلى أحداث Push API في الخلفية (من خلال حدثpush
). - يمكن للصفحة إنشاء عدة مشغّلات ويب، ولكن يتحكّم مشغّل خدمات واحد في جميع علامات التبويب النشطة ضمن النطاق الذي تم تسجيله به.
- يرتبط عمر مشغّل الويب ارتباطًا وثيقًا بعلامة التبويب التي ينتمي إليها، بينما تكون دورة حياة مشغّل الخدمات مستقلة عن ذلك. لهذا السبب، سيؤدي إغلاق علامة التبويب التي يتم فيها تشغيل عامل الويب إلى إنهاء عمله، بينما يمكن أن يستمر مشغّل الخدمات في العمل في الخلفية، حتى عندما لا يكون للموقع الإلكتروني أي علامات تبويب نشطة مفتوحة.
حالات الاستخدام
تشير الاختلافات بين كلا النوعين من العاملين إلى الحالات التي قد يرغب فيها الشخص في استخدام أحدهما دون الآخر:
تتعلّق حالات استخدام Web Workers بشكل أكبر بتخفيف عبء العمل (مثل العمليات الحسابية المعقّدة) من خلال تفويضها إلى سلسلة ثانوية لتجنُّب حظر واجهة المستخدم.

- مثال: أراد الفريق الذي أنشأ لعبة الفيديو PROXX إبقاء سلسلة التعليمات البرمجية الرئيسية خالية قدر الإمكان للتعامل مع إدخالات المستخدمين والرسوم المتحركة. ولتحقيق ذلك، استخدموا عاملي الويب لتشغيل منطق اللعبة والحفاظ على حالتها في سلسلة محادثات منفصلة.

تكون مهام عاملي الخدمة مرتبطة بشكل عام بالعمل كخادم وكيل للشبكة، والتعامل مع المهام التي تتم في الخلفية، وأشياء مثل التخزين المؤقت والعمل بلا إنترنت.

مثال: في تطبيق ويب تقدّمي خاص بالبودكاست، قد يرغب المستخدم في السماح للمستخدمين بتنزيل حلقات كاملة للاستماع إليها بلا إنترنت. ويمكن استخدام عامل الخدمة، ولا سيما واجهة برمجة التطبيقات Background Fetch API، لتحقيق ذلك. بهذه الطريقة، إذا أغلق المستخدم علامة التبويب أثناء تنزيل الحلقة، لن تتم مقاطعة عملية التنزيل.

الأدوات والمكتبات
يمكن تنفيذ عملية التواصل بين النوافذ والعاملين باستخدام واجهات برمجة تطبيقات مختلفة ذات مستوى أدنى. لحسن الحظ، تتوفّر مكتبات تجرّد هذه العملية، وتتولّى حالات الاستخدام الأكثر شيوعًا. في هذا القسم، سنتناول اثنتين من هذه المكتبات، وهما Comlink وWorkbox، اللتان تهتمان على التوالي بنقل البيانات بين النافذة وعمال الويب وعمال الخدمة.

Comlink
Comlink هي مكتبة صغيرة (1.6 كيلوبايت) لإجراءات RPC تتولّى العديد من التفاصيل الأساسية عند إنشاء مواقع إلكترونية تستخدم Web Workers. وقد تم استخدامها في مواقع إلكترونية مثل PROXX وSquoosh. يمكنك الاطّلاع على ملخّص حول دوافعها ونماذج الرموز البرمجية هنا.
Workbox
Workbox هي مكتبة شائعة لإنشاء مواقع إلكترونية تستخدم برامج الخدمة. تتضمّن هذه الحزمة مجموعة من أفضل الممارسات بشأن أمور مثل التخزين المؤقت، والوضع بلا إنترنت، والمزامنة في الخلفية، وما إلى ذلك. يوفّر الوحدة workbox-window
طريقة ملائمة لتبادل الرسائل بين عامل الخدمة والصفحة.
الخطوات التالية
يركّز الجزء المتبقي من هذه السلسلة على أنماط التواصل بين النوافذ وخدمات العاملين:
- دليل التخزين المؤقت الإلزامي: استدعاء مشغّل الخدمات من الصفحة لتخزين الموارد مؤقتًا مسبقًا (على سبيل المثال، في سيناريوهات الجلب المسبق)
- إشعارات البث: يتم استدعاء الصفحة من عامل الخدمة لإعلام المستخدمين بالمستجدّات المهمة (مثل توفّر إصدار جديد من الموقع الإلكتروني).
- التواصل في اتجاهَين: تفويض مهمة إلى عامل خدمة (مثل تنزيل كبير الحجم)، وإبقاء الصفحة على علم بمستوى التقدّم
للاطّلاع على أنماط التواصل بين النوافذ وعمال الويب، يمكنك الانتقال إلى استخدام عمال الويب لتشغيل JavaScript خارج سلسلة التعليمات الرئيسية للمتصفح.