يتم تشغيل هذه القاعدة عندما تكتشف PageSpeed Insights أن استجابة الخادم لا تحتوي على رأس ذاكرة تخزين مؤقت صريح أو أن بعض الموارد محددة للتخزين المؤقت لفترة قصيرة فقط.

لمحة عامة

إذا قام المستخدمون بزيارة موقع الويب الخاص بك عدة مرات، فإن التخزين المؤقت للمتصفح للموارد الثابتة يمكن أن يوفر للمستخدمين الوقت. يجب تطبيق رؤوس ذاكرة التخزين المؤقت على جميع الموارد الثابتة القابلة للتخزين المؤقت، وليس فقط على عدد صغير من الموارد الثابتة ( على سبيل المثال، الصور). تتضمن الموارد القابلة للتخزين المؤقت ملفات JS و CSS وملفات الصور وملفات الكائنات الثنائية الأخرى ( ملفات الوسائط وملفات PDF، إلخ). بشكل عام، HTML ليس موردًا ثابتًا ولا ينبغي اعتباره موردًا قابلاً للتخزين المؤقت افتراضيًا. يجب أن تفكر في سياسات التخزين المؤقت التي تنطبق على HTML لموقع الويب الخاص بك.

التوصيات

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

  • سوفExpiresاضبط على التواريخ المستقبلية، على الأقل أسبوع واحد، وحتى سنة واحدة ( نميل إلى الضبطExpiresبدون تعيينCache-Control : max-ageلأن الأول مدعوم على نطاق أوسع).لا تضعه على تاريخ مستقبلي لأكثر من عام، لأن هذا ينتهك إرشادات RFC.
  • إذا كنت تعرف متى سيتغير المورد، فيمكنك تعيين تاريخ انتهاء صلاحية أقصر. ومع ذلك، إذا كنت تعتقد أن المورد " قد يتغير " ولكنك لا تعرف الوقت المحدد، فيجب عليك تعيين تاريخ انتهاء صلاحية أطول واستخدام بصمة عنوان URL ( كما هو موضح أدناه).

Expires و Cache-Control : max-age team

这些标头用于指定相应时间段,浏览器可在指定的这段时间内使用已缓存的资源,而无需查看网络服务器是否提供了新版资源。这些缓存标头功能强大,没有任何应用条件限制。在设置这些标头并下载资源后,浏览器不会为资源发出任何GET请求,除非过期日期到期或达到时间最大值,亦或是用户清除了缓存。

Last-Modifed و ETag الرأس

يمكن استخدام هذه الرؤوس لتحديد كيف يجب على المستعرض تحديد ما إذا كانت الملفات المستخدمة للتخزين المؤقت هي نفسها. فيLast-Modifiedالتاريخ المحدد في الرأس، وETagيمكن أن تكون القيمة المحددة في الرأس أي قيمة تحدد المورد بشكل فريد ( عادةً إصدار ملف أو قيمة تجزئة المحتوى).Last-Modifiedإنه رأس ذاكرة تخزين مؤقت " أضعف " لأن المتصفحات تستخدم الاستدلال لتحديد ما إذا كنت بحاجة إلى الزحف إلى المحتوى من ذاكرة التخزين المؤقت.

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

أي رأس ذاكرة التخزين المؤقت يجب أن أستخدمه؟

لجميع الموارد القابلة للتخزين المؤقت، حدد Expiresأوالحد الأقصى لعمر Cache-Controlو واحدLast-ModifiedأوETagإنه أمر بالغ الأهمية. لا تحتاج إلى تحديد في نفس الوقتExpiresوCache-Control : max-age- أو كليهماLast-ModifiedوETag.

استخدام بصمات URL

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

تتمثل الطريقة الشائعة للتعرف على بصمات الأصابع في استخدام رقم سداسي عشري 128 بت يقوم بترميز قيمة تجزئة محتوى الملف.

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

 

باستثناء ملاحظة أخرى، فإن محتوى هذه الصفحة مرخص به بموجبالسمة المشتركة الإبداعية 3.0 License, and code samples are licensed under the طراز Apache 2.0 Licenseمن أجل المفصولين، انظرالسياسات الموقعية.