ما هي البيانات المخبأة؟ ماذا يعني مسح ذاكرة التخزين المؤقت وماذا يفعل؟

أولاً ، ما هي ذاكرة التخزين المؤقت؟

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

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

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

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

وسوف تغطي هذه المقالة طريقتين انتشارا من التخزين المؤقت: متصفح التخزين المؤقت و شبكات توصيل المحتوى (CDN) التي.

إلى جانب ذاكرات التخزين المؤقت ، تلعب المستودعات الأخرى دورًا في معماريات الويب ؛ غالبًا ما يتم تصميمها لاستيعاب كم هائل من البيانات. ومع ذلك ، فهي لا تركز على أداء الاسترجاع.

على سبيل المثال ، يعد Amazon Glacier مستودعًا للبيانات مصممًا لتخزين البيانات بتكلفة منخفضة ، ولكن لا يتم استردادها بسرعة. من ناحية أخرى ، تم تصميم قاعدة بيانات SQL لتكون مرنة ومحدثة وسريعة ، ولكنها نادرًا ما تكون رخيصة وليست عادةً بنفس سرعة ذاكرة التخزين المؤقت.

ذاكرة التخزين المؤقت للمتصفح: ذاكرة تخزين مؤقت

تخزن ذاكرة التخزين المؤقت الموارد محليًا على الكمبيوتر حيث يتم تشغيل المتصفح. عندما يكون المتصفح نشطًا ، سيتم تخزين الموارد المستردة على الذاكرة الفعلية للكمبيوتر (RAM) ، وربما أيضًا على القرص الصلب.

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

سرعة استرجاع الموارد أمر جوهري ، وكذلك ضرورة أن تكون الموارد جديدة. المورد القديم هو مورد قديم وربما لم يعد صالحًا.

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

كيف يعرف المتصفح ما هو قديم في ذاكرة التخزين المؤقت؟

الإجابة ليست بسيطة ، لكن هناك طريقتان رئيسيتان: خرق ذاكرة التخزين المؤقت وحقول رأس HTTP.

خرق ذاكرة التخزين المؤقت

الإيطاليون

Cache-busting هو أسلوب من جانب الخادم يضمن أن المتصفح يجلب فقط الموارد الجديدة. يفعل هذا بشكل غير مباشر.

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

لنفترض أن لدي صفحة ويب موجودة www.foobar.com/about.htmlفيها تحتوي على كل شيء تريد معرفته عن foobar.com. بمجرد زيارة هذه الصفحة ، يتم تخزينها والموارد المرتبطة بها مؤقتًا بواسطة المتصفح.

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

ماذا تفعل أنت ، مسؤول الويب Quxbaz ، لضمان دفع كل المحتوى الجديد؟

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

وبالتالي ، من خلال تغيير عنوان URI للمورد من www.foobar.com/about.htmlإلى www.foobar.com/about2.html(أو إلى www.quxbaz.com/about.html) ، لن يجد المتصفح أي موارد ذاكرة تخزين مؤقت مرتبطة بـ URI هذا ، ويقوم بجلب كامل من الخادم. قد يكون المورد إلى حد كبير هو نفسه الأصلي الموجود ضمن URI القديم ، لكن المتصفح لا يعرف ذلك.

ومع ذلك ، لا يتعين عليك تغيير اسم الصفحة. منذ URI يتضمن أيضا سلسلة الاستعلام عن طريق التعريف، يمكنك إضافة معلمة الإصدار إلى URI: www.foobar.com/about.html?v=2hef9eb1.

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

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

حقول رأس HTTP

يأتي كل طلب مورد مع بعض المعلومات الوصفية المعروفة باسم الرأس. على العكس من ذلك ، تحتوي كل استجابة أيضًا على معلومات رأس مرتبطة بها.

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

طلبات HEAD والطلبات المشروطة

طلب HEAD يشبه طلب GET أو POST. بدلاً من طلب المورد الكامل ، يطلب طلب HEAD فقط حقول الرأس التي يمكن إرجاعها في طلب كامل.

سيكون عنوان المورد بشكل عام أصغر بكثير (في عدد إجمالي البايتات) من بيانات المورد المرتبطة به ("نص" الاستجابة). تعد معلومات الرأس مفيدة بشكل كافٍ للسماح للمتصفح بتحديد حداثة المورد في ذاكرة التخزين المؤقت الخاصة به.

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

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

إذا كان الأمر كذلك ، فسيقوم الخادم بإرجاع استجابة 304 مع معلومات رأس المورد فقط ، ولا يوجد جسم مورد (البيانات). إذا تم تحديد أن ذاكرة التخزين المؤقت للمتصفح قديمة ، فسيعيد الخادم استجابة 200 OK كاملة.

هذه الآلية أسرع من استخدام طلبات HEAD ، لأنها تقضي على إمكانية الاضطرار إلى إصدار طلبين بدلاً من طلب واحد.

ما سبق يبسط ما يمكن أن يكون عملية معقدة للغاية. هناك الكثير من عمليات الضبط التي ينطوي عليها التخزين المؤقت ، ولكن يتم التحكم في كل ذلك من خلال حقول الرأس ، وأهمها التحكم في ذاكرة التخزين المؤقت.

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

عند الاستجابة لطلب ما ، سيرسل الخادم حقول رأس إلى المتصفح للإشارة إلى السلوك الذي يجب أن يتكيف عند التخزين المؤقت. إذا قمت بتحميل الصفحة في //en.wikipedia.org/wiki/Uniform_Resource_Identifier، فإن الاستجابة تحتوي على هذا في سجل الرأس الخاص بها:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

خاص يعني أنه يجب على المستعرض فقط تخزين محتوى المستند مؤقتًا.

تم تعيين s-maxage و max-age على 0 . ل يالي maxage القيمة للخوادم بروكسي مع مخابئ، في حين maxage المقصود للمتصفح. إن تأثير تعيين max-age وحده هو أن المورد المخزن مؤقتًا تنتهي صلاحيته على الفور ، ومع ذلك قد يظل مستخدمًا (على الرغم من أنه قديم) أثناء إعادة تحميل الصفحة أثناء جلسة المتصفح نفسها.

قد يكون المورد الذي لا معنى له هو إعادة التحقق من خلال طلب HEAD ، والذي قد يتبعه طلب GET أو POST ، اعتمادًا على الاستجابة. و -يجب إعادة التحقق أوامر التوجيه المستعرض لإعادة تأكيد الموارد المخزنة مؤقتا إذا كان لا معنى لها.

نظرًا لتعيين max-age على 0 في هذه الحالة ، يصبح المورد المخزن مؤقتًا قديمًا فور استلامه. الجمع بين الأمرين يكافئ الأمر الفردي no-cache .

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

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

العلامة الإلكترونية

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

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

تؤثر علامات الرأس الأخرى على التخزين المؤقت

علامات رأس تنتهي و أخيرا المعدلة كلها ولكن عفا عليها الزمن، ولكن لا تزال أرسلت من قبل معظم خوادم من أجل التوافق مع الإصدارات السابقة مع المتصفحات القديمة. مثال:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

هنا ، يتم تعيين انتهاء الصلاحية على التاريخ الصفري (تاريخياً ، من نظام التشغيل UNIX). يشير ذلك إلى أن المورد تنتهي صلاحيته على الفور ، تمامًا كما يفعل max-age = 0 . آخر تعديل يخبر المتصفح عندما تم إجراء آخر تحديث للمورد ، والذي يمكنه بعد ذلك استخدامه لتحديد ما إذا كان يجب إعادة إحضاره بدلاً من استخدام قيمة ذاكرة التخزين المؤقت.

فرض تحديث ذاكرة التخزين المؤقت من المتصفح

ما هو الصعب إعادة التحميل؟

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

حسنًا ، قد لا يتم تضمين بعض الموارد بشكل صريح في الصفحة. بدلاً من ذلك ، يمكن جلبها ديناميكيًا ، عادةً بعد تحميل كل شيء صريح.

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

ما هو مسح ذاكرة التخزين المؤقت وإعادة التحميل الثابت؟

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

شبكات توصيل المحتوى: ذاكرة تخزين مؤقت ذات موقع جغرافي

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

يتم توجيه طلبات المستعرض إلى شبكة CDN قريبة ، وبالتالي تقصير بيانات استجابة المسافة الفعلية يجب أن تنتقل. يمكن لشبكات CDN أيضًا التعامل مع كميات كبيرة من حركة المرور ، وتوفير الأمان ضد بعض أنواع الهجمات.

تحصل شبكة CDN على مواردها من خلال نقطة تبادل الإنترنت (IXP) ، وهي عُقد تشكل جزءًا من العمود الفقري للإنترنت (بالأحرف الكبيرة). هناك خطوات يجب اتخاذها لإعداد توجيه الطلب للانتقال إلى CDN بدلاً من الخادم المضيف. الخطوة التالية هي التأكد من أن CDN لديها المحتوى الحالي لموقعك على الويب.

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

في الوقت الحاضر ، تستخدم معظم شبكات CDN بروتوكولات التخزين المؤقت الموضحة أعلاه (أو ما شابه) من أجل 1) تنزيل موارد جديدة ، و 2) تحديث الموارد الموجودة. لا يزال المتصفح يحتوي على ذاكرة التخزين المؤقت الخاصة به ، ولم يتغير أي من ذلك. كل ما تفعله CDN هو جعل عمليات نقل الموارد الجديدة أسرع.