التخزين المؤقت هو تقنية تقوم بتخزين البيانات/المعلومات المستخدمة بشكل متكرر في الذاكرة بحيث يمكن استرجاعها مباشرة من الذاكرة في المرة التالية التي تحتاج فيها إلى نفس البيانات/المعلومات بدلاً من إنشائها مرة أخرى من التطبيق.
يعد التخزين المؤقت مهمًا للغاية في تحسين أداء ASP لأنه يتم إنشاء صفحات ASP وعناصر التحكم ديناميكيًا. وهذا مهم للغاية بالنسبة للبيانات المتعلقة بالتفاعل، لأن وقت الاستجابة ثمين.
في الوسائط التي يجب الوصول إليها بسرعة، مثل ذاكرة الوصول العشوائي للكمبيوتر، تضع ذاكرة التخزين المؤقت البيانات المستخدمة بشكل متكرر. يحتوي وقت تشغيل ASP على أزواج ذات قيمة أساسية تسمى كائنات CLR المخزنة مؤقتًا. وهو موجود داخل التطبيق ومتاح من خلال HttpContext وSystem.Web.UI.Page.
في بعض النواحي، يتشابه التخزين المؤقت وتخزين كائنات الحالة. ومع ذلك، فإن المعلومات المخزنة في كائن الحالة حتمية، على سبيل المثال، يمكنك حساب البيانات المخزنة في كائن الحالة، لكن البيانات المخزنة مؤقتًا ليست حتمية.
البيانات غير متوفرة في ظل الظروف التالية:
فإذا انتهت دورة حياتها.
إذا كان التطبيق يحرر ذاكرته،
إذا لم يتم استبدال ذاكرة التخزين المؤقت لسبب ما.
يمكنك استخدام مفهرس للوصول إلى العناصر الموجودة في ذاكرة التخزين المؤقت، ومن الممكن التحكم في عمر الكائنات في ذاكرة التخزين المؤقت وتعيين العلاقة بين الكائنات المخزنة مؤقتًا ومواردها المادية.
يوفر ASP الأنواع المختلفة التالية من ذاكرة التخزين المؤقت:
ذاكرة التخزين المؤقت للإخراج : يمكن لذاكرة التخزين المؤقت للإخراج تخزين نسخة من آخر صفحة ويب تم عرضها، أو صفحة جزئية تم إرسالها إلى العميل. في المرة التالية التي يطلب فيها العميل الصفحة، يتم إرسال نسخة مخبأة من الصفحة إلى العميل بدلاً من إعادة إنشاء الصفحة، مما يوفر الوقت.
التخزين المؤقت للبيانات : يشير التخزين المؤقت للبيانات إلى تخزين البيانات مؤقتًا من مصدر البيانات. طالما لم يتم استبدال ذاكرة التخزين المؤقت، سيتم الحصول على البيانات من ذاكرة التخزين المؤقت عند طلبها مرة أخرى. عند استبدال ذاكرة التخزين المؤقت، يتم جلب البيانات الجديدة من مصدر البيانات ويتم ملء ذاكرة التخزين المؤقت مرة أخرى.
ذاكرة التخزين المؤقت للكائنات : ذاكرة التخزين المؤقت للكائنات هي تخزين كائنات الصفحة مؤقتًا، مثل عناصر التحكم المرتبطة بالبيانات، وما إلى ذلك. يتم وضع البيانات المخزنة مؤقتًا في ذاكرة الخادم.
التخزين المؤقت للفئة : في المرة الأولى التي يتم فيها تشغيل صفحة ويب أو خدمة ويب، يتم تجميع فئات الصفحات المجمعة. ثم يتم تخزين التجميع مؤقتًا على الخادم. في المرة التالية التي يتم فيها طلب الصفحة أو الخدمة، سيتم استخدام التجميع المخزن مؤقتًا. عندما يتم تغيير التعليمات البرمجية المصدر، يقوم CLR بإعادة ترجمة التجميع.
ذاكرة التخزين المؤقت للتكوين : يتم تخزين معلومات تكوين التطبيق في ملف التكوين. تقوم ذاكرة التخزين المؤقت للتكوين بتخزين معلومات التكوين في ذاكرة الخادم.
في هذا البرنامج التعليمي، سننظر في التخزين المؤقت للمخرجات، والتخزين المؤقت للبيانات، والتخزين المؤقت للكائنات.
قد يتضمن عرض الصفحة بعض العمليات المعقدة، مثل الوصول إلى قاعدة البيانات، وعرض عناصر التحكم المعقدة، وما إلى ذلك. يسمح التخزين المؤقت للمخرجات بتجاوز الرحلات ذهابًا وإيابًا إلى الخادم عن طريق تخزين البيانات مؤقتًا في الذاكرة. حتى الصفحة بأكملها يمكن تخزينها مؤقتًا.
يعد توجيه OutputCache مسؤولاً عن التخزين المؤقت للإخراج. فهو يتيح التخزين المؤقت للمخرجات ويوفر درجة معينة من التحكم في سلوكه.
بناء جملة التوجيه OutputCache:
<%@ OutputCache Duration="15" VaryByParam="None" %>
ضع هذا التوجيه تحت توجيه الصفحة. وهذا يخبر البيئة أن الصفحة تحتاج إلى التخزين المؤقت لمدة 15 ثانية. سيساعد معالج حدث تحميل الصفحة التالي في تأكيد ما إذا كانت الصفحة قد تم تخزينها مؤقتًا أم لا.
protected void Page_Load(object sender, EventArgs e){ Thread.Sleep(10000); Response.Write("تم إنشاء هذه الصفحة وتخزينها مؤقتًا في:" + DateTime.Now.ToString());}
يقوم الأسلوب Thread.Sleep() بإيقاف العملية لفترة زمنية محددة. في هذا المثال، يتم إيقاف سلسلة المحادثات لمدة 10 ثوانٍ، لذلك عند تنزيل الصفحة لأول مرة، يستغرق الأمر 10 ثوانٍ. ومع ذلك، في المرة التالية التي تقوم فيها بتحديث الصفحة، لن يستغرق الأمر وقتًا لأنه تم بالفعل جلب الصفحة من ذاكرة التخزين المؤقت ولن يتم تنزيلها مرة أخرى.
يحتوي توجيه OutputCache على الميزات التالية عند المساعدة في التحكم في سلوك ذاكرة التخزين المؤقت للإخراج:
ملكية | قيمة | يصف |
---|---|---|
DiskCacheable | صحيح / خطأ | يصف ما إذا كان يمكن كتابة الإخراج على القرص باستخدام ذاكرة التخزين المؤقت. |
لا يوجد متجر | صحيح / خطأ | يصف ما إذا كان قد تم إرسال رأس ذاكرة التخزين المؤقت "no store". |
ملف تعريف ذاكرة التخزين المؤقت | اسم السلسلة | اسم ملف تكوين ذاكرة التخزين المؤقت المخزن في web.config. |
VaryByParam | لا شيء*اسم المعلمة | استخدم قيم سلسلة مفصولة بفاصلة منقوطة في طلبات GET أو قيم متغيرة في طلبات POST. |
VaryByHeader | * اسم ملف الرأس | قد تكون عبارة عن سلسلة مفصولة بفواصل منقوطة تحدد الرؤوس التي يرسلها العميل. |
VaryByCustom | سلسلة المتصفح المخصصة | قم بإعلام ASP.NET بالتغييرات التي تطرأ على ذاكرة التخزين المؤقت للإخراج عبر إصدار اسم المتصفح أو سلسلة العميل. |
موقع | أي عميل يقوم بتنزيل خادم البث لا شيء | أي: قد يتم تخزين الصفحة مؤقتًا في أي مكان العميل: يتم تضمين المحتوى المخبأ في المتصفح دفق التنزيل: يتم حفظ المحتوى المخبأ في دفق التنزيل والخادم الخادم: يتم حفظ ذاكرة التخزين المؤقت فقط في الخادم لا شيء: لا يُسمح بالتخزين المؤقت. |
مدة | رقم | عدد الثواني التي سيتم خلالها تخزين الصفحة أو العملية مؤقتًا. |
لنقم بإضافة مربع نص وزر إلى المثال السابق، وإضافة معالج حدث لهذا الزر.
protected void btnmagic_Click(object sender, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> مرحبًا, " + this.txtname.Text + "</h2>") ;}
تغيير توجيه OutputCache:
<%@ OutputCache Duration="60" VaryByParam="txtname" %>
عند تنفيذ البرنامج، يقوم ASP بتخزين الصفحة مؤقتًا بناءً على الاسم الموجود في مربع النص.
الجانب الرئيسي للتخزين المؤقت للبيانات هو التخزين المؤقت للتحكم في مصدر البيانات. لقد ناقشنا عناصر التحكم في مصدر البيانات التي تمثل بيانات من مصدر بيانات، مثل قاعدة بيانات أو ملف XML. عناصر التحكم هذه مشتقة من فئة DataSourceControl المجردة ولها الخصائص الموروثة التالية للتخزين المؤقت:
فترة التخزين المؤقت - الوقت الذي يقوم فيه مصدر البيانات بتخزين البيانات مؤقتًا.
سياسة انتهاء صلاحية ذاكرة التخزين المؤقت — تحدد سلوك ذاكرة التخزين المؤقت عند انتهاء صلاحية البيانات الموجودة في ذاكرة التخزين المؤقت.
تبعية قيمة ذاكرة التخزين المؤقت - تحدد قيمة التحكم التي تنقل البيانات تلقائيًا خارج ذاكرة التخزين المؤقت عند انتهاء صلاحيتها.
تمكين التخزين المؤقت — يمكنك التأكد من تخزين البيانات مؤقتًا.
لتوضيح التخزين المؤقت للبيانات، نقوم بإنشاء موقع ويب جديد وإضافة نموذج ويب جديد إليه. قم بإضافة عنصر تحكم SqlDataSource إلى قاعدة البيانات التي تتصل بالبرنامج التعليمي للوصول إلى البيانات.
في هذا المثال، نضيف تصنيفًا إلى الصفحة يعرض وقت استجابة الصفحة.
<asp:Label ID="lbltime" runat="server"></asp:Label>
باستثناء هذه العلامة، تكون الصفحة بأكملها هي نفس البرنامج التعليمي للوصول إلى البيانات. أضف معالج الأحداث إلى هذه الصفحة لتنزيل الوقت.
محمية باطلة Page_Load(object sender, EventArgs e){ lbltime.Text = String.Format("تم نشر الصفحة في: {0}"، DateTime.Now.ToLongTimeString());}
يجب أن تبدو الصفحة المصممة كما يلي:
عند تنفيذ الصفحة لأول مرة، لا يحدث شيء مختلف. عرض الملصق، في كل مرة يتم فيها تحديث الصفحة، سيتم إعادة تحميل الصفحة، وسيتم عرض تغيير الوقت على الملصق.
بعد ذلك، قم بتعيين الخاصية EnableCaching لعنصر تحكم مصدر البيانات إلى "true" والخاصية Cacheduration إلى "60". سيتم تنفيذ التخزين المؤقت وستنتهي صلاحية ذاكرة التخزين المؤقت كل 60 ثانية.
في كل مرة يتم تحديثها، سيتغير الطابع الزمني. ولكن إذا قمت بتغيير البيانات في الجدول خلال 60 ثانية، فلن يتم عرضها حتى تنتهي صلاحية ذاكرة التخزين المؤقت.
<asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.ProviderName %>" SelectCommand = "SELECT * FROM [DotNetReferences]" تمكين التخزين المؤقت = "صحيح" CacheDuration = "60"> </asp:SqlDataSource>
يوفر التخزين المؤقت للكائنات مرونة أكبر من تقنيات التخزين المؤقت الأخرى. يمكنك استخدام التخزين المؤقت للكائن لوضع أي كائن في ذاكرة التخزين المؤقت. يمكن أن تكون الكائنات أيضًا من أي نوع - أنواع البيانات، وعناصر تحكم الشبكة، والفئات، وكائنات إعدادات البيانات، وما إلى ذلك. يمكن إضافة هذه العناصر إلى ذاكرة التخزين المؤقت ببساطة عن طريق تعيين قيمة لها، كما هو موضح أدناه:
Cache["key"] = item;
لإدراج كائنات في ذاكرة التخزين المؤقت، يوفر ASP الأسلوب Insert(). هناك أربعة إصدارات مثقلة من هذه الطريقة. دعونا نلقي نظرة:
الزائد | يصف |
---|---|
Cache.Insert((مفتاح، قيمة)؛ | أدخلها في ذاكرة التخزين المؤقت في شكل أزواج قيمة المفتاح، مع كون الأولوية ودورة الحياة هي الافتراضية. |
Cache.Insert(مفتاح، قيمة، تبعيات)؛ | أدخل ذاكرة التخزين المؤقت في ذاكرة التخزين المؤقت كأزواج قيمة مفتاح، مع الأولويات الافتراضية ومدة الحياة، وتبعيات ذاكرة التخزين المؤقت المرتبطة بملفات أو محتوى آخر، لذلك لم تعد تعديلات ذاكرة التخزين المؤقت محدودة. |
Cache.Insert(مفتاح، قيمة، تبعيات، انتهاء الصلاحية المطلق، انزلاق انتهاء الصلاحية)؛ | أشر إلى فترة صلاحية التكوين أعلاه. |
Cache.Insert(مفتاح, قيمة, تبعيات, انتهاء الصلاحية المطلق, انزلاق انتهاء الصلاحية, الأولوية, onRemoveCallback); | بالإضافة إلى التكوين، فإنه يسمح أيضًا بتعيين أولوية المحتوى المخزن مؤقتًا والتفويض، مما يشير إلى الطريقة التي سيتم استدعاؤها عند إزالة كائن. |
يتم استخدام دورة الحياة الديناميكية لإزالة عنصر ذاكرة التخزين المؤقت غير الصالح لأي فترة زمنية محددة. يحفظ مقتطف الكود التالي عنصر ذاكرة تخزين مؤقت خالي من التبعية بعمر انزلاقي مدته 10 دقائق:
Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
أنشئ صفحة باستخدام زر وتسمية فقط. اكتب الكود التالي في حدث تحميل الصفحة:
protected void Page_Load(object sender, EventArgs e){ if (this.IsPostBack) { lblinfo.Text += "تم إرسال الصفحة مرة أخرى.<br/>" } else { lblinfo.Text += "تم إنشاء الصفحة.<br/> "; } if (Cache["testitem"] == null) { lblinfo.Text += "إنشاء عنصر اختبار.<br/>"; DateTime testItem = DateTime.Now; lblinfo.Text += "تخزين عنصر الاختبار في ذاكرة التخزين المؤقت"; lblinfo.Text += "لمدة 30 ثانية.<br/>"; (30)، TimeSpan.Zero } else { lblinfo.Text += "استرداد عنصر الاختبار.<br/>"; = (DateTime)Cache["testitem"]; lblinfo.Text += "عنصر الاختبار هو: " + testItem.ToString(); lblinfo.Text += "<br/>" } lblinfo.Text += "<br />";}
عند تحميل الصفحة لأول مرة، تظهر:
تم إنشاء الصفحة. إنشاء عنصر اختبار. تخزين عنصر الاختبار في ذاكرة التخزين المؤقت لمدة 30 ثانية.
إذا قمت بالنقر فوق الزر مرة أخرى خلال 30 ثانية، على الرغم من حذف الصفحة، فسيحصل عنصر تحكم التسمية على المعلومات من ذاكرة التخزين المؤقت، كما هو موضح أدناه:
تم إرسال الصفحة مرة أخرى.يتم الآن استرداد عنصر الاختبار.عنصر الاختبار هو: 14-07-2010 01:25:04