قد يؤدي نشر مشغّل الخدمات إلى تغيير سلوكيات موقع ويب بطرق غير متوقعة. نظرًا لأن Workbox تعمل على تسهيل كتابة مشغّل الخدمات ونشره، قد يكون من الأسهل تفويت بعض التأثيرات التي يحصل عليها عامل الخدمة على موقع الويب بمجرد نشره.
وهذا لا يعني أن استخدام Workbox يؤدي إلى نتائج سيئة، ولكن الراحة التي يوفرها قد تجعل من السهل الوقوع في بعض الصعوبات إذا لم يكن الشخص على دراية بما يصاحب نشر عامل خدمة.
صعوبات التخزين المؤقت
سبق أن تناولنا في هذه المستندات عملية الحفظ المُسبَق بدون أن نتناول بشكل كامل كيف يمكن أن تؤدي هذه الممارسة إلى نتائج عكسية. قد تواجه مشاكل إذا طبّقت التخزين المؤقت على عدد كبير جدًا من مواد العرض، أو إذا تم تسجيل عامل الخدمات قبل أن تتاح للصفحة فرصة لإنهاء تحميل مواد العرض المهمة.
بما أنّ السلوك التلقائي لـ workbox-webpack-plugin
هو توجيه عامل الخدمة إلى التخزين المؤقت التلقائي للأصول التي تم إنشاؤها،
قد يشكّل ذلك مشكلة بطريقة يصعب تفويتها، لأنّ العوائق التي تحول دون الانتقال إلى استخدام التطبيق منخفض.
عندما يخزّن أحد مشغّلي الخدمات الأصول أثناء التثبيت، يتم بدء طلب واحد أو أكثر عبر الشبكة في الوقت نفسه. من المحتمل أن يؤدي هذا إلى حدوث مشكلة في تجربة المستخدم إذا لم يكن الوقت مناسبًا. وحتى إذا كان التوقيت لحظيًا، قد يؤدي ذلك إلى إهدار البيانات إذا لم يكن حجم مواد العرض المخزّنة مؤقتًا محدودًا بطريقة ما.
كل شيء في التوقيت
إذا كان عامل الخدمة يخزن أي شيء في ذاكرة التخزين المؤقت، فإن الوقت الذي تم تسجيله فيه مهم.
غالبًا ما يتم تسجيل مشغِّلي الخدمات باستخدام عناصر <script>
مضمّنة.
ويعني ذلك أنّ برامج تحليل HTML اللغوية قد تكتشف رمز تسجيل مشغّل الخدمات قبل تحميل الأصول المهمة للصفحة.
هذه مشكلة. ينبغي أن يكون عامل الخدمات محايدًا في أسوأ الحالات من حيث الأداء، ولا يجعل الأداء أسوأ. قدِّم للمستخدمين معروفًا وسجِّل مشغّل الخدمات عند تنشيط حدث load
للصفحة.
ويقلل ذلك من احتمال أن يتداخل التخزين المؤقت مسبقًا مع تحميل مواد العرض المهمة للصفحة،
مما يعني بدوره أن الصفحة يمكن أن تصبح تفاعلية بشكل أسرع بدون الاضطرار إلى التعامل مع طلبات الشبكة لمواد العرض التي قد لا تكون مطلوبة حتى وقت لاحق على أي حال.
مراعاة استخدام البيانات
بغض النظر عن التوقيت، يتضمن التخزين المؤقت إرسال طلبات الشبكة. إذا لم يتم تنظيم عرض مواد العرض المراد تخزينها بشكل مسبق، فقد تتمثّل النتيجة في إهدار قدر من الإهدار.
تعد البيانات المهدرة مقايضة محتملة مع التخزين المؤقت، ولكن لا يتمتع الجميع بإمكانية الوصول إلى إنترنت سريع أو حتى خطط بيانات غير محدودة! عند التخزين المسبق، ننصحك بالاستغناء عن الأصول الكبيرة بشكلٍ خاص والاعتماد على التخزين المؤقت في وقت التشغيل للحصول عليها بدلاً من وضع افتراضات مكلفة.
قد يؤدي بدء تشغيل مشغّل الخدمات إلى تأخير طلبات الشبكة
يعمل عاملو الخدمة في عملية منفصلة عن باقي الرمز البرمجي للموقع الإلكتروني. وتبدأ هذه العملية وتتوقف بشكلٍ متكرر. عندما يحتاج مشغّل الخدمات إلى معالجة حدث الجلب بعد أن يصبح غير نشط، يحتاج المتصفّح أولاً إلى قضاء بعض الوقت في تشغيل مشغّل الخدمات. وهذه النفقات الإضافية قبل معالجة الطلب ضئيلة جدًا مقارنةً بمزايا عرض رد من ذاكرة التخزين المؤقت بدلاً من الشبكة.
عند استخدام استراتيجيات لا يمكن عرضها من ذاكرة التخزين المؤقت ويجب الانتقال إلى الشبكة، خاصةً عند التعامل مع طلبات التنقّل، يزيد وقت التشغيل دائمًا بعض التأخير. استنادًا إلى إمكانات الجهاز و/أو ضغط وحدة المعالجة المركزية (CPU)، قد يواجه طلب التنقّل تأخيرًا ملحوظًا بسبب بطء عمليات التشغيل لدى مشغّل الخدمة. ويعني نشر مشغّل الخدمات بدون الوعي بهذا التأخير أنّ المستخدمين قد يواجهون نتيجة أداء غير مقصودة.
تم حلّ هذه المشكلة باستخدام ميزة التحميل المسبق للتنقل، ولكنها غير متوفرة بعد في كل المتصفحات. ومع ذلك، ننصحك بالتفكير في استخدام هذه اللغة، وقد تم تناولها لاحقًا في هذه المستندات.
قد تحقق استراتيجيات التخزين المؤقت أولاً نتائج عكسية
تُعدّ استراتيجيات التخزين المؤقت التي تستند إلى ذاكرة التخزين المؤقت أولاً - أو التي تستشير ذاكرة التخزين المؤقت فقط - مفيدة للغاية بالنسبة إلى الأداء أو الوصول بلا اتصال بالإنترنت. ومع ذلك، فإنها غالبًا ما تتسبب في حدوث مشاكل في بعض الحالات المحدّدة.
التخزين المؤقت خلال وقت التشغيل لمواد العرض الثابتة التي لم يتم تحويلها
يُصدِر عادةً مطوّرو البرامج أصول ثابتة مع تجزئة مستندة إلى المحتوى في اسم الملف (على سبيل المثال، styles.a4edf38c.css
).
أما بالنسبة إلى عاملي الخدمة الذين يستخدمون استراتيجيات التخزين المؤقت التي تستند إلى ذاكرة التخزين المؤقت أولاً بالنسبة إلى الأصول الثابتة،
ويستخدِمون استراتيجية تركّز على الشبكة أولاً في ترميز الصفحة،
فمن المفترض ألّا تكون هناك مشاكل في التخزين المؤقت لأنّ مواد العرض المعدَّلة تتم الإشارة إليها دائمًا في الترميز الذي يتم استرداده دائمًا من الشبكة.
تظهر المشكلات في المواقف التي يتم فيها تخزين الأصول الثابتة غير المعزَّزة في ذاكرة التخزين المؤقت أثناء وقت التشغيل باستخدام هذه الاستراتيجيات.
إذا تم توفير وظائف الموقع الإلكتروني من خلال app.js
وتم استخدام استراتيجية وقت تشغيل ذاكرة التخزين المؤقت أولاً،
سيتم تعديل app.js
لاحقًا بدون تغيير اسم الملف،
سيستمر عرض النسخة المخزَّنة مؤقتًا في البداية من ذاكرة التخزين المؤقت بدلاً من تحديثها.
الحل هو استخدام استراتيجية تستشير الشبكة للحصول على التحديثات، مثل الشبكة أولاً أو إعادة التحقق القديمة أثناء إعادة التحقق. بدلاً من ذلك، يمكن لأدوات الإنشاء إنشاء بيان ذاكرة التخزين المؤقت لمواد العرض هذه، لأن منطق التخزين المؤقت لـ Workbox سيبقيها محدثة.
بغض النظر عن ذلك، يجب أن تفكّر جيدًا في تحديد إصدارات مواد العرض الثابتة، سواء من خلال تجزئة في اسم مادة العرض أو في سلسلة طلب البحث. وسيؤدي ذلك إلى تجنُّب المشاكل المتعلّقة بالأصول القديمة لدى مشغِّلي الخدمات الذين يستخدِمون استراتيجيات وقت تشغيل ذاكرة التخزين المؤقت أولاً لمواد العرض الثابتة.
مراعاة حصص مساحة التخزين
من الشائع طرح تحديثات مشغّل الخدمات من حين لآخر، وعند طرح التحديثات، يتم عادةً حذف ذاكرة التخزين المؤقت القديمة التي تتضمّن أسماء منتهية الصلاحية عادةً أثناء تفعيل مشغّل الخدمات الجديد.
ومع ذلك، فإن بعض التكرارات التحسينية للمشغّلات ذات مدة طويلة الأمد، أو قد لا يتم تحديث أسماء ذاكرة التخزين المؤقت في التحديثات الجديدة. وعند حدوث ذلك، يمكن أن تتراكم مواد العرض الثابتة القديمة في ذاكرات التخزين المؤقت أثناء طرح تحديثات لها. تحدّد المتصفّحات حصصًا لمساحة التخزين، وقد تختلف حدودها. هذا سبب وجيه لمراعاة هذه الأفكار!
يقوم مربع العمل بعمل جيد للتخفيف من هذه المشكلات، ولكن لا يزال من الممكن تجاوز حصص التخزين. يمكنك التحكّم بشكل أدق في ذاكرات التخزين المؤقت باستخدام وحدة Workbox-expiration.
لا تقلق
إن نشر عامل الخدمة ليس بالأمر الهين. ومع ذلك، لا ينبغي أن يكون إنجازًا مخيفًا مع القليل من التخطيط واليقظة لما يتطلبه نشر عامل خدمات باستخدام Workbox. أثناء المتابعة، ستساعدك هذه الوثائق في التعامل مع هذه المخاوف بعناية وثقة.