التخزين المؤقت لعامل الخدمات والتخزين المؤقت باستخدام بروتوكول HTTP

إيجابيات وسلبيات استخدام منطق انتهاء صلاحية متسق أو مختلف في جميع طبقات ذاكرة التخزين المؤقت لبرنامج عامل الخدمة وذاكرة التخزين المؤقت لبروتوكول HTTP

Jonathan Chen
Jonathan Chen

في حين أنّ برامج الخدمة وتطبيقات الويب التقدّمية أصبحت من معايير تطبيقات الويب الحديثة، أصبح تخزين الموارد مؤقتًا أكثر تعقيدًا من أي وقت مضى. تتناول هذه المقالة الصورة الكبيرة لميزة التخزين المؤقت في المتصفح، بما في ذلك:

  • حالات استخدام التخزين المؤقت لمشغّل الخدمات والاختلافات بينه وبين التخزين المؤقت لبروتوكول HTTP
  • مزايا وعيوب استراتيجيات انتهاء صلاحية التخزين المؤقت المختلفة في مشغّل الخدمات مقارنةً باستراتيجيات التخزين المؤقت العادية عبر HTTP

نظرة عامة على عملية التخزين المؤقت

بشكل عام، يتّبع المتصفّح ترتيب التخزين المؤقت أدناه عند طلب أحد الموارد:

  1. ذاكرة التخزين المؤقت لبرنامج عامل الخدمة: يتحقّق برنامج عامل الخدمة مما إذا كان المورد متوفّرًا في ذاكرة التخزين المؤقت ويقرّر ما إذا كان سيعرض المورد نفسه استنادًا إلى استراتيجيات التخزين المؤقت المبرمَجة. يُرجى العِلم أنّ هذه العملية لا تتم تلقائيًا. عليك إنشاء معالج أحداث جلب في عامل الخدمة واعتراض طلبات الشبكة حتى يتم عرض الطلبات من ذاكرة التخزين المؤقت لعامل الخدمة بدلاً من الشبكة.
  2. ذاكرة التخزين المؤقت عبر HTTP (المعروفة أيضًا باسم ذاكرة التخزين المؤقت للمتصفّح): إذا تم العثور على المورد في ذاكرة التخزين المؤقت عبر HTTP ولم تنتهِ صلاحيته بعد، سيستخدم المتصفّح المورد تلقائيًا من ذاكرة التخزين المؤقت عبر HTTP.
  3. من جهة الخادم: إذا لم يتم العثور على أي شيء في ذاكرة التخزين المؤقت لبرنامج عامل الخدمة أو ذاكرة التخزين المؤقت لبروتوكول HTTP، ينتقل المتصفّح إلى الشبكة لطلب المورد. إذا لم يتم تخزين المورد مؤقتًا في شبكة توصيل المحتوى (CDN)، يجب أن يعود الطلب إلى خادم المصدر.

رسم توضيحي للنظرة العامة على مسار التخزين المؤقت

طبقات التخزين المؤقت

التخزين المؤقت لمشغّل الخدمات

يعترض عامل الخدمة طلبات HTTP من نوع الشبكة ويستخدم استراتيجية التخزين المؤقت لتحديد الموارد التي يجب إرجاعها إلى المتصفح. يؤدي كل من ذاكرة التخزين المؤقت لمشغّل الخدمات وذاكرة التخزين المؤقت لبروتوكول HTTP الغرض العام نفسه، ولكن توفّر ذاكرة التخزين المؤقت لمشغّل الخدمات إمكانات تخزين مؤقت أكبر، مثل التحكّم الدقيق في المحتوى الذي يتم تخزينه مؤقتًا وطريقة إجراء التخزين المؤقت.

التحكّم في ذاكرة التخزين المؤقت لمشغّل الخدمات

يَعترض عامل الخدمة طلبات HTTP باستخدام برامج معالجة الأحداث (عادةً الحدث fetch). يوضّح مقتطف الرمز هذا منطق استراتيجية التخزين المؤقت Cache-First.

مخطّط يوضّح كيف تعترض مشغّلات الخدمات طلبات HTTP.

ننصح بشدة باستخدام Workbox لتجنُّب إعادة اختراع العجلة. على سبيل المثال، يمكنك تسجيل مسارات عناوين URL الخاصة بالموارد باستخدام سطر واحد من رمز التعبير العادي.

import {registerRoute} from 'workbox-routing';

registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);

استراتيجيات التخزين المؤقت في مشغّل الخدمات وحالات الاستخدام

يوضّح الجدول التالي استراتيجيات التخزين المؤقت الشائعة في عامِل الخدمة والحالات التي تكون فيها كل استراتيجية مفيدة.

الاستراتيجيات أسباب التجديد حالات الاستخدام
الشبكة فقط يجب أن يكون المحتوى محدّثًا في جميع الأوقات.
  • عمليات الدفع وإتمام الشراء
  • كشوفات حسابات الأرصدة
الشبكة تعود إلى ذاكرة التخزين المؤقت من الأفضل عرض المحتوى الجديد. ومع ذلك، إذا تعذّر الوصول إلى الشبكة أو كانت غير مستقرة، يمكن عرض محتوى قديم قليلاً.
  • بيانات في الوقت المناسب
  • الأسعار والتكاليف (يجب تضمين بيانات إخلاء المسؤولية)
  • حالات الطلب
Stale-while-revalidate لا بأس في عرض المحتوى المخزَّن مؤقتًا على الفور، ولكن يجب استخدام المحتوى المخزَّن مؤقتًا المعدَّل في المستقبل.
  • خلاصات الأخبار
  • صفحات بيانات المنتجات
  • الرسائل
استخدام البيانات المخزّنة مؤقتًا أولاً، ثم الرجوع إلى الشبكة المحتوى غير مهم ويمكن عرضه من ذاكرة التخزين المؤقت لتحسين الأداء، ولكن يجب أن يتحقّق عامل الخدمة من توفّر تحديثات من وقت لآخر.
  • هياكل التطبيقات
  • المراجع الشائعة
ذاكرة التخزين المؤقت فقط لا يتغيّر المحتوى إلا في حالات نادرة.
  • المحتوى الثابت

مزايا إضافية للتخزين المؤقت باستخدام عامِل الخدمة

بالإضافة إلى التحكّم الدقيق في منطق التخزين المؤقت، يوفّر التخزين المؤقت لمشغّل الخدمات أيضًا ما يلي:

  • مساحة أكبر للذاكرة والتخزين لمصدرك: يخصّص المتصفّح موارد ذاكرة التخزين المؤقت لبروتوكول HTTP على أساس المصدر. بعبارة أخرى، إذا كان لديك نطاقات فرعية متعددة، ستتشارك جميعها ذاكرة التخزين المؤقت نفسها لبروتوكول HTTP. ليس هناك ما يضمن بقاء محتوى المصدر/النطاق في ذاكرة التخزين المؤقت لبروتوكول HTTP لفترة طويلة. على سبيل المثال، يمكن للمستخدم محو ذاكرة التخزين المؤقت من خلال التنظيف اليدوي من واجهة مستخدم إعدادات المتصفّح، أو من خلال إعادة تحميل الصفحة بشكل كامل. باستخدام ذاكرة تخزين مؤقت لبرنامج عامل الخدمة، يزداد احتمال بقاء المحتوى المخزَّن مؤقتًا مخزَّنًا مؤقتًا. لمزيد من المعلومات، يمكنك الاطّلاع على مساحة التخزين الدائمة.
  • مرونة أكبر مع الشبكات غير المستقرة أو التجارب غير المتصلة بالإنترنت: باستخدام ذاكرة التخزين المؤقت لبروتوكول HTTP، لا يتوفّر لك سوى خيار ثنائي: إما تخزين المورد مؤقتًا أو عدم تخزينه. باستخدام التخزين المؤقت في Service Worker، يمكنك التخفيف من حدة المشاكل الصغيرة بسهولة أكبر (باستخدام استراتيجية "التحقّق من الصحة أثناء عدم التجديد")، أو تقديم تجربة كاملة بلا إنترنت (باستخدام استراتيجية "التخزين المؤقت فقط") أو حتى تجربة بينهما، مثل واجهات مستخدم مخصّصة تتضمّن أجزاءً من الصفحة من ذاكرة التخزين المؤقت في Service Worker واستبعاد بعض الأجزاء (باستخدام استراتيجية "ضبط معالج الأخطاء") عند الاقتضاء.

التخزين المؤقت عبر HTTP

عندما يحمّل المتصفّح صفحة ويب والموارد ذات الصلة للمرة الأولى، يخزّن هذه الموارد في ذاكرة التخزين المؤقت لبروتوكول HTTP. يتم عادةً تفعيل ذاكرة التخزين المؤقت HTTP تلقائيًا من خلال المتصفحات، ما لم يوقفها المستخدم النهائي بشكل صريح.

يعني استخدام التخزين المؤقت لبروتوكول HTTP الاعتماد على الخادم لتحديد وقت تخزين أحد الموارد مؤقتًا ومدة التخزين.

التحكّم في تاريخ انتهاء صلاحية ذاكرة التخزين المؤقت في HTTP باستخدام عناوين استجابة HTTP

عندما يستجيب خادم لطلب متصفّح بشأن أحد الموارد، يستخدم الخادم عناوين استجابة HTTP لإخبار المتصفّح بالمدة التي يجب أن يخزّن فيها المورد مؤقتًا. اطّلِع على رؤوس الاستجابة: إعداد خادم الويب لمعرفة المزيد.

استراتيجيات التخزين المؤقت لبروتوكول HTTP وحالات الاستخدام

تخزين HTTP مؤقتًا أبسط بكثير من تخزين عامل الخدمة مؤقتًا، لأنّ تخزين HTTP مؤقتًا يتعامل فقط مع منطق انتهاء صلاحية الموارد المستند إلى الوقت (TTL). يمكنك الاطّلاع على ما هي قيم عناوين الاستجابة التي يجب استخدامها؟ ومنع الطلبات غير الضرورية من الشبكة باستخدام ذاكرة التخزين المؤقت عبر HTTP (الملخّص) لمعرفة المزيد عن استراتيجيات التخزين المؤقت عبر 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، لذا يتم الانتقال إلى جهة الخادم.

الإيجابيات والسلبيات

  • الإيجابيات: يحصل المستخدمون على رد فوري لأنّ عامل الخدمة يعرض الموارد المخزّنة مؤقتًا على الفور.
  • الإيجابيات: يمكن لعامل الخدمة التأكّد من أنّ طلب next لعنوان URL معيّن يستخدم استجابة جديدة من الشبكة، وذلك بفضل إعادة التحقّق التي تتم "في الخلفية".
  • العيوب: يجب توفّر استراتيجية تخزين مؤقت لمشغّل الخدمات محدّدة جيدًا.

السيناريو: التخزين المؤقت قصير الأجل (الشبكة تعود إلى ذاكرة التخزين المؤقت)

  • عندما يكون المورد المخزّن مؤقتًا صالحًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (يوم واحد أو أقل): ينتقل برنامج عامل الخدمة إلى الشبكة للحصول على المورد. يعرض المتصفّح المورد من ذاكرة التخزين المؤقت لبروتوكول HTTP إذا كان متوفّرًا فيها. إذا كانت الشبكة غير متاحة، يعرض مشغّل الخدمات المورد من ذاكرة التخزين المؤقت الخاصة به.
  • عند انتهاء صلاحية مورد مخزّن مؤقتًا في ذاكرة التخزين المؤقت الخاصة ببرنامج عامل الخدمة (أكثر من يوم واحد): ينتقل برنامج عامل الخدمة إلى الشبكة لجلب المورد. يسترد المتصفّح الموارد عبر الشبكة لأنّ النسخة المخزّنة مؤقتًا في ذاكرة التخزين المؤقت لبروتوكول HTTP قد انتهت صلاحيتها.

الإيجابيات والسلبيات

  • الإيجابيات: عندما تكون الشبكة غير مستقرة أو متوقفة، يعرض عامل الخدمة الموارد المخزّنة مؤقتًا على الفور.
  • العيوب: يتطلّب مشغّل الخدمات إيقاف التخزين المؤقت بشكل إضافي لتجاوز التخزين المؤقت عبر HTTP وتنفيذ طلبات "الشبكة أولاً".

الخاتمة

نظرًا لتعقيد مجموعة سيناريوهات التخزين المؤقت، لا يمكن تصميم قاعدة واحدة تشمل جميع الحالات. مع ذلك، استنادًا إلى النتائج الواردة في الأقسام السابقة، إليك بعض الاقتراحات التي يجب أخذها في الاعتبار عند تصميم استراتيجيات التخزين المؤقت:

  • لا يجب أن يتوافق منطق التخزين المؤقت لمشغّل الخدمات مع منطق انتهاء صلاحية التخزين المؤقت عبر HTTP. إذا أمكن، استخدِم منطق انتهاء صلاحية أطول في مشغّل الخدمات لمنحه المزيد من التحكّم.
  • لا يزال التخزين المؤقت لبروتوكول HTTP يؤدي دورًا مهمًا، ولكنّه لا يكون موثوقًا عندما تكون الشبكة غير مستقرة أو متوقفة.
  • راجِع استراتيجيات التخزين المؤقت لكل مورد للتأكّد من أنّ استراتيجية التخزين المؤقت في عامل الخدمة تقدّم قيمتها بدون التعارض مع ذاكرة التخزين المؤقت لبروتوكول HTTP.

مزيد من المعلومات