إيجابيات وسلبيات استخدام منطق انتهاء صلاحية متسق أو مختلف في جميع طبقات ذاكرة التخزين المؤقت لبرنامج عامل الخدمة وذاكرة التخزين المؤقت لبروتوكول HTTP
في حين أنّ برامج الخدمة وتطبيقات الويب التقدّمية أصبحت من المعايير الأساسية لتطبيقات الويب الحديثة، أصبح التخزين المؤقت للموارد أكثر تعقيدًا من أي وقت مضى. تتناول هذه المقالة الصورة الكبيرة لميزة التخزين المؤقت في المتصفح، بما في ذلك:
- حالات استخدام التخزين المؤقت في Service Worker والتخزين المؤقت في HTTP والاختلافات بينهما
- مزايا وعيوب استراتيجيات انتهاء صلاحية التخزين المؤقت المختلفة في Service Worker مقارنةً باستراتيجيات التخزين المؤقت العادية عبر HTTP
نظرة عامة على عملية التخزين المؤقت
بشكل عام، يتّبع المتصفّح ترتيب التخزين المؤقت أدناه عند طلب مورد:
- ذاكرة التخزين المؤقت لبرنامج عامل الخدمة: يتحقّق برنامج عامل الخدمة مما إذا كان المورد متوفّرًا في ذاكرة التخزين المؤقت، ويقرّر ما إذا كان سيعرض المورد نفسه استنادًا إلى استراتيجيات التخزين المؤقت المبرمَجة. يُرجى العِلم أنّ هذه العملية لا تتم تلقائيًا. عليك إنشاء معالج أحداث جلب في عامل الخدمة واعتراض طلبات الشبكة حتى يتم عرض الطلبات من ذاكرة التخزين المؤقت لعامل الخدمة بدلاً من الشبكة.
- ذاكرة التخزين المؤقت عبر HTTP (المعروفة أيضًا باسم ذاكرة التخزين المؤقت للمتصفّح): إذا تم العثور على المورد في ذاكرة التخزين المؤقت عبر HTTP ولم تنتهِ صلاحيته بعد، سيستخدم المتصفّح المورد تلقائيًا من ذاكرة التخزين المؤقت عبر HTTP.
- من جهة الخادم: إذا لم يتم العثور على أي شيء في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة أو ذاكرة التخزين المؤقت الخاصة ببروتوكول HTTP، ينتقل المتصفّح إلى الشبكة لطلب المورد. إذا لم يتم تخزين المورد مؤقتًا في شبكة توصيل المحتوى، يجب أن يعود الطلب إلى خادم المصدر.
طبقات التخزين المؤقت
التخزين المؤقت لمشغّل الخدمات
يعترض عامل الخدمة طلبات HTTP من نوع الشبكة ويستخدم استراتيجية التخزين المؤقت لتحديد الموارد التي يجب إرجاعها إلى المتصفح. يؤدي كلّ من ذاكرة التخزين المؤقت لمشغّل الخدمات وذاكرة التخزين المؤقت لبروتوكول HTTP الغرض العام نفسه، ولكنّ ذاكرة التخزين المؤقت لمشغّل الخدمات توفّر إمكانات تخزين مؤقت أكبر، مثل التحكّم الدقيق في المحتوى الذي يتم تخزينه مؤقتًا وطريقة التخزين المؤقت.
التحكّم في ذاكرة التخزين المؤقت لمشغّل الخدمات
يعترض عامل الخدمة طلبات HTTP باستخدام برامج معالجة الأحداث (عادةً الحدث fetch
). يوضّح مقتطف الرمز هذا منطق استراتيجية التخزين المؤقت Cache-First.
ننصحك بشدة باستخدام Workbox لتجنُّب إعادة اختراع العجلة. على سبيل المثال، يمكنك تسجيل مسارات عناوين URL الخاصة بالموارد باستخدام سطر واحد من رمز regex.
import {registerRoute} from 'workbox-routing';
registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);
استراتيجيات التخزين المؤقت في Service Worker وحالات الاستخدام
يوضّح الجدول التالي استراتيجيات التخزين المؤقت الشائعة في Service Worker والحالات التي تكون فيها كل استراتيجية مفيدة.
الاستراتيجيات | أسباب التحديث | حالات الاستخدام |
---|---|---|
الشبكة فقط | يجب أن يكون المحتوى محدّثًا في جميع الأوقات. |
|
الشبكة تعود إلى ذاكرة التخزين المؤقت | من الأفضل عرض المحتوى الجديد. ومع ذلك، إذا تعذّر الوصول إلى الشبكة أو كانت غير مستقرة، يمكن عرض محتوى قديم قليلاً. |
|
Stale-while-revalidate | لا بأس في عرض المحتوى المخزَّن مؤقتًا على الفور، ولكن يجب استخدام المحتوى المخزَّن مؤقتًا المعدَّل في المستقبل. |
|
استخدام ذاكرة التخزين المؤقت أولاً، ثم الرجوع إلى الشبكة | المحتوى غير مهم ويمكن عرضه من ذاكرة التخزين المؤقت لتحسين الأداء، ولكن يجب أن يتحقّق عامل الخدمة من توفّر التحديثات من وقت لآخر. |
|
ذاكرة التخزين المؤقت فقط | لا يتغيّر المحتوى إلا في حالات نادرة. |
|
مزايا إضافية للتخزين المؤقت باستخدام عامِل الخدمة
بالإضافة إلى التحكّم الدقيق في منطق التخزين المؤقت، يوفّر التخزين المؤقت لمشغّل الخدمات أيضًا ما يلي:
- مساحة أكبر للذاكرة والتخزين للمصدر: يخصّص المتصفّح موارد ذاكرة التخزين المؤقت لبروتوكول HTTP على أساس المصدر. بعبارة أخرى، إذا كان لديك نطاقات فرعية متعددة، ستتشارك جميعها ذاكرة التخزين المؤقت نفسها لبروتوكول HTTP. ليس هناك ما يضمن بقاء محتوى مصدرك/نطاقك في ذاكرة التخزين المؤقت HTTP لفترة طويلة. على سبيل المثال، يمكن للمستخدم محو ذاكرة التخزين المؤقت من خلال تنظيفها يدويًا من واجهة مستخدم إعدادات المتصفح، أو من خلال إعادة تحميل الصفحة بشكل كامل. باستخدام ذاكرة تخزين مؤقت لبرنامج عامل الخدمة، يزداد احتمال بقاء المحتوى المخزّن مؤقتًا مخزّنًا مؤقتًا. لمزيد من المعلومات، يُرجى الاطّلاع على مساحة التخزين الثابتة.
- مرونة أكبر مع الشبكات غير المستقرة أو التجارب غير المتصلة بالإنترنت: باستخدام ذاكرة التخزين المؤقت HTTP، لا يتوفّر لك سوى خيار ثنائي: إما تخزين المورد مؤقتًا أو عدم تخزينه. باستخدام التخزين المؤقت في Service Worker، يمكنك الحدّ من المشاكل الصغيرة بسهولة أكبر (باستخدام استراتيجية "التحقّق من الصحة أثناء عدم الحداثة")، أو تقديم تجربة كاملة بلا إنترنت (باستخدام استراتيجية "التخزين المؤقت فقط") أو حتى تجربة بينهما، مثل واجهات مستخدم مخصّصة تتضمّن أجزاءً من الصفحة من التخزين المؤقت في Service Worker وبعض الأجزاء المستبعَدة (باستخدام استراتيجية "ضبط معالج الأخطاء") عند الاقتضاء.
التخزين المؤقت عبر HTTP
عندما يحمّل المتصفّح صفحة ويب والموارد ذات الصلة للمرة الأولى، يخزّن هذه الموارد في ذاكرة التخزين المؤقت HTTP. يتم عادةً تفعيل ذاكرة التخزين المؤقت لبروتوكول HTTP تلقائيًا من خلال المتصفحات، ما لم يوقفها المستخدم النهائي بشكل صريح.
يعني استخدام التخزين المؤقت لبروتوكول HTTP الاعتماد على الخادم لتحديد وقت تخزين أحد الموارد مؤقتًا ومدة التخزين.
التحكّم في انتهاء صلاحية ذاكرة التخزين المؤقت في HTTP باستخدام عناوين استجابة HTTP
عندما يستجيب خادم لطلب متصفّح بشأن أحد الموارد، يستخدم الخادم عناوين استجابة HTTP لإخبار المتصفّح بالمدة التي يجب أن يخزّن فيها المورد مؤقتًا. اطّلِع على رؤوس الاستجابة: إعداد خادم الويب لمعرفة المزيد.
استراتيجيات التخزين المؤقت لبروتوكول HTTP وحالات الاستخدام
التخزين المؤقت عبر HTTP أبسط بكثير من التخزين المؤقت باستخدام مشغّل الخدمات، لأنّ التخزين المؤقت عبر HTTP يتعامل فقط مع منطق انتهاء صلاحية الموارد المستند إلى الوقت (TTL). يمكنك الاطّلاع على ما هي قيم عناوين الاستجابة التي يجب استخدامها؟ والملخّص لمعرفة المزيد عن استراتيجيات التخزين المؤقت عبر HTTP.
تصميم منطق انتهاء صلاحية ذاكرة التخزين المؤقت
يوضّح هذا القسم مزايا وعيوب استخدام منطق انتهاء صلاحية متسق في جميع طبقات ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة وذاكرة التخزين المؤقت لبروتوكول HTTP، بالإضافة إلى مزايا وعيوب منطق انتهاء الصلاحية المنفصل في جميع هذه الطبقات.
منطق انتهاء الصلاحية المتسق لجميع طبقات ذاكرة التخزين المؤقت
لتوضيح الإيجابيات والسلبيات، سنستعرض 3 سيناريوهات: طويل الأمد ومتوسط الأمد وقصير الأمد.
السيناريوهات | التخزين المؤقّت الطويل الأجل | التخزين المؤقت على المدى المتوسط | التخزين المؤقّت القصير الأجل |
---|---|---|---|
استراتيجية التخزين المؤقت لمشغّل الخدمات | ذاكرة التخزين المؤقت، مع الرجوع إلى الشبكة | Stale-while-revalidate | الشبكة تعود إلى ذاكرة التخزين المؤقت |
مدة البقاء (TTL) في ذاكرة التخزين المؤقت لمشغّل الخدمات | 30 يومًا | يوم واحد | 10 دقائق |
الحد الأقصى لعمر ذاكرة التخزين المؤقت عبر HTTP | 30 يومًا | يوم واحد | 10 دقائق |
السيناريو: التخزين المؤقت الطويل الأجل (التخزين المؤقت، والرجوع إلى الشبكة)
- عندما يكون المورد المخزَّن مؤقتًا صالحًا (30 يومًا أو أقل): يعرض عامل الخدمة المورد المخزَّن مؤقتًا على الفور بدون الانتقال إلى الشبكة.
- عند انتهاء صلاحية مورد مخزّن مؤقتًا (أكثر من 30 يومًا): ينتقل عامل الخدمة إلى الشبكة لجلب المورد. لا يتضمّن المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت لبروتوكول HTTP، لذا يتم الانتقال إلى جهة الخادم للحصول على المورد.
العيوب: في هذا السيناريو، يقدّم التخزين المؤقت عبر HTTP قيمة أقل لأنّ المتصفّح سيرسل الطلب دائمًا إلى الخادم عند انتهاء صلاحية ذاكرة التخزين المؤقت في مشغّل الخدمات.
السيناريو: التخزين المؤقت على المدى المتوسط (Stale-while-revalidate)
- عندما يكون المورد المخزّن مؤقتًا صالحًا (أقل من يوم واحد): يعرض عامل الخدمة المورد المخزّن مؤقتًا على الفور، ثم ينتقل إلى الشبكة لجلب المورد. يحتوي المتصفّح على نسخة من المورد في ذاكرة التخزين المؤقت لبروتوكول HTTP، لذا يعرض هذه النسخة لمشغّل الخدمة.
- عند انتهاء صلاحية مورد مخزّن مؤقتًا (أكثر من يوم واحد): يعرض عامل الخدمة المورد المخزّن مؤقتًا على الفور، ثم ينتقل إلى الشبكة لجلب المورد. لا يتضمّن المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت HTTP، لذا ينتقل إلى جهة الخادم لجلب المورد.
العيوب: يتطلّب مشغّل الخدمات إيقاف التخزين المؤقت الإضافي لتجاوز التخزين المؤقت لبروتوكول HTTP من أجل الاستفادة إلى أقصى حد من خطوة "إعادة التحقّق".
السيناريو: التخزين المؤقت قصير الأجل (الشبكة تعود إلى ذاكرة التخزين المؤقت)
- عندما يكون المورد المخزّن مؤقتًا صالحًا (أقل من أو يساوي 10 دقائق): ينتقل عامل الخدمة إلى الشبكة لجلب المورد. يتضمّن المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت لبروتوكول HTTP، لذا يعرضها لمشغّل الخدمات بدون الحاجة إلى التواصل مع الخادم.
- عندما تنتهي صلاحية مورد مخزّن مؤقتًا (أكثر من 10 دقائق): يعرض عامل الخدمة المورد المخزّن مؤقتًا على الفور، ثم ينتقل إلى الشبكة لجلب المورد. لا يتضمّن المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت HTTP، لذا ينتقل إلى جهة الخادم لجلب المورد.
العيوب: كما هو الحال في سيناريو التخزين المؤقت على المدى المتوسط، يتطلّب مشغّل الخدمات منطقًا إضافيًا لإبطال التخزين المؤقت من أجل إلغاء ذاكرة التخزين المؤقت لبروتوكول HTTP وجلب أحدث مورد من جهة الخادم.
برنامج عامل الخدمة في جميع السيناريوهات
في جميع السيناريوهات، يمكن أن تستمر ذاكرة التخزين المؤقت لمشغّل الخدمات في عرض الموارد المخزّنة مؤقتًا عندما تكون الشبكة غير مستقرة. من ناحية أخرى، لا يمكن الاعتماد على ذاكرة التخزين المؤقت لبروتوكول HTTP عندما تكون الشبكة غير مستقرة أو معطّلة.
اختلاف منطق انتهاء صلاحية ذاكرة التخزين المؤقت في ذاكرة التخزين المؤقت لبرنامج عامل الخدمة وطبقات HTTP
لتوضيح الإيجابيات والسلبيات، سنلقي نظرة أخرى على السيناريوهات طويلة الأجل ومتوسطة الأجل وقصيرة الأجل.
السيناريوهات | التخزين المؤقّت الطويل الأجل | التخزين المؤقت على المدى المتوسط | التخزين المؤقّت القصير الأجل |
---|---|---|---|
استراتيجية التخزين المؤقت لمشغّل الخدمات | ذاكرة التخزين المؤقت، مع الرجوع إلى الشبكة | Stale-while-revalidate | الشبكة تعود إلى ذاكرة التخزين المؤقت |
مدة البقاء (TTL) في ذاكرة التخزين المؤقت لمشغّل الخدمات | 90 يومًا | 30 يومًا | يوم واحد |
الحد الأقصى لعمر ذاكرة التخزين المؤقت عبر HTTP | 30 يومًا | يوم واحد | 10 دقائق |
السيناريو: التخزين المؤقت الطويل الأجل (التخزين المؤقت، والرجوع إلى الشبكة)
- عندما يكون المرجع المخزَّن مؤقتًا صالحًا في ذاكرة التخزين المؤقت الخاصة بمشغّل الخدمات (90 يومًا أو أقل): يعرض مشغّل الخدمات المرجع المخزَّن مؤقتًا على الفور.
- عند انتهاء صلاحية مورد مخزّن مؤقتًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (أكثر من 90 يومًا): ينتقل برنامج عامل الخدمة إلى الشبكة لجلب المورد. لا يملك المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت لبروتوكول HTTP، لذا يتم الانتقال إلى جهة الخادم.
الإيجابيات والسلبيات
- الإيجابيات: يحصل المستخدمون على استجابة فورية لأنّ عامل الخدمة يعرض الموارد المخزّنة مؤقتًا على الفور.
- الإيجابيات: يتيح عامل الخدمة تحكّمًا أكثر دقة في وقت استخدام ذاكرة التخزين المؤقت ووقت طلب إصدارات جديدة من الموارد.
- العيوب: يجب توفّر استراتيجية تخزين مؤقت محدّدة جيدًا لمشغّل الخدمات.
السيناريو: التخزين المؤقت في منتصف المدة (Stale-while-revalidate)
- عندما يكون المرجع المخزَّن مؤقتًا صالحًا في ذاكرة التخزين المؤقت الخاصة بمشغّل الخدمات (أقل من أو يساوي 30 يومًا): يعرض مشغّل الخدمات المرجع المخزَّن مؤقتًا على الفور.
- عند انتهاء صلاحية مورد مخزّن مؤقتًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (أكثر من 30 يومًا): ينتقل برنامج عامل الخدمة إلى الشبكة للحصول على المورد. لا يتضمّن المتصفّح نسخة من المورد في ذاكرة التخزين المؤقت لبروتوكول HTTP، لذا يتم الانتقال إلى جهة الخادم.
الإيجابيات والسلبيات
- الإيجابيات: يحصل المستخدمون على استجابة فورية لأنّ عامل الخدمة يعرض الموارد المخزّنة مؤقتًا على الفور.
- الإيجابيات: يمكن لعامل الخدمة التأكّد من أنّ طلب التالي لعنوان URL معيّن يستخدم استجابة جديدة من الشبكة، وذلك بفضل إعادة التحقّق التي تتم "في الخلفية".
- العيوب: يجب توفّر استراتيجية تخزين مؤقت محدّدة جيدًا لمشغّل الخدمات.
السيناريو: التخزين المؤقت قصير الأجل (الشبكة تعود إلى ذاكرة التخزين المؤقت)
- عندما يكون مورد مخزّن مؤقتًا صالحًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (يوم واحد أو أقل): ينتقل برنامج عامل الخدمة إلى الشبكة للحصول على المورد. يعرض المتصفّح المورد من ذاكرة التخزين المؤقت HTTP إذا كان متوفّرًا فيها. إذا كانت الشبكة متوقفة، يعرض مشغّل الخدمات المورد من ذاكرة التخزين المؤقت الخاصة به.
- عند انتهاء صلاحية مورد مخزّن مؤقتًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (أكثر من يوم واحد): ينتقل برنامج عامل الخدمة إلى الشبكة لجلب المورد. يجلب المتصفّح الموارد عبر الشبكة لأنّ النسخة المخزّنة مؤقتًا في ذاكرة التخزين المؤقت لبروتوكول HTTP قد انتهت صلاحيتها.
الإيجابيات والسلبيات
- الإيجابيات: عندما تكون الشبكة غير مستقرة أو متوقفة، يعرض عامل الخدمة الموارد المخزّنة مؤقتًا على الفور.
- العيوب: يتطلّب مشغّل الخدمات إيقاف التخزين المؤقت الإضافي لتجاوز ذاكرة التخزين المؤقت HTTP وتنفيذ طلبات "الشبكة أولاً".
الخاتمة
نظرًا لتعقيد مجموعة سيناريوهات التخزين المؤقت، لا يمكن تصميم قاعدة واحدة تغطي جميع الحالات. مع ذلك، استنادًا إلى النتائج التي تم التوصّل إليها في الأقسام السابقة، إليك بعض الاقتراحات التي يجب أخذها في الاعتبار عند تصميم استراتيجيات التخزين المؤقت:
- لا يجب أن تتوافق منطق التخزين المؤقت في Service Worker مع منطق انتهاء صلاحية التخزين المؤقت عبر HTTP. إذا أمكن، استخدِم منطق انتهاء صلاحية أطول في مشغّل الخدمات لمنح مشغّل الخدمات المزيد من التحكّم.
- لا يزال التخزين المؤقت عبر HTTP يؤدي دورًا مهمًا، ولكنّه لا يكون موثوقًا عندما تكون الشبكة غير مستقرة أو متوقفة.
- راجِع استراتيجيات التخزين المؤقت لكل مورد للتأكّد من أنّ استراتيجية التخزين المؤقت في عامل الخدمة تقدّم قيمتها بدون التعارض مع ذاكرة التخزين المؤقت لبروتوكول HTTP.