1. ما هو التخزين المؤقت لـ ASP/لماذا يجب تخزينه مؤقتًا؟
عندما يتم إنشاء موقع الويب الخاص بك باستخدام تقنية ASP في المراحل المبكرة، قد تشعر بالراحة التي توفرها تقنية صفحات الويب الديناميكية ASP، بالإضافة إلى حرية التعديل والتحكم المجاني في http. ومع ذلك، مع زيادة عدد الزيارات، ستجد بالتأكيد أن سرعة الوصول إلى موقعك أصبحت أبطأ وأبطأ، ويتم إعادة تشغيل IIS بشكل متكرر أكثر فأكثر. بعد ذلك، يجب أن ترغب في تحسين asp، مثل استبدال قاعدة البيانات بأداء أفضل، وإنشاء الفهارس، وكتابة الإجراءات المخزنة، وما إلى ذلك. لا تتطلب بعض هذه التدابير زيادة ضغط التكلفة، بينما يتطلب البعض الآخر ضغطًا كبيرًا على التكلفة (مثل الوصول التجميعي إلى SQL)، ولا يكون التأثير مؤكدًا بالضرورة.
في مواجهة ضغط الوصول إلى الويب، أعتقد أن الطريقة الأكثر اقتصادا هي استخدام تقنية تحسين ذاكرة التخزين المؤقت لتخفيف ضغط خدمة الويب.
غالبًا ما تعني زيادة حركة المرور على الويب نموًا سريعًا في الطلب على الموارد التالية:
1. تتطلب الزيادة في حركة مرور بطاقة الشبكة المزيد من وحدة المعالجة المركزية (CPU) لمعالجة حركة مرور الشبكة وخيوط الإدخال / الإخراج للشبكة.
2. الحاجة إلى فتح/إغلاق اتصالات قاعدة البيانات بشكل متكرر (في حالة استخدام تقنية قاعدة البيانات - عادةً ما يستخدم ASP قواعد البيانات كمخزن للبيانات)، وعدد الأشياء التي تستهلك الموارد بشكل خطير، والتوقف التام الناجم عن المعاملات المتنافسة على الموارد سيؤدي إلى زيادة I/الشبكة يا أو استهلاك وحدة المعالجة المركزية.
3. إذا تم استخدام الجلسة، فسوف يستهلك IIS المزيد من الذاكرة من أجل الحفاظ على الحالة، وقد يتسبب استهلاك الذاكرة في عدم كفاية الذاكرة الفعلية، مما يتسبب في التبادلات المتكررة بين الذاكرة الفعلية والذاكرة المساعدة، مما يتسبب في إيقاف تنفيذ التعليمات البرمجية مؤقتًا وحظر استجابة الويب. .
4. بسبب عدم الاستجابة للوصول في الوقت المناسب، سيؤدي ذلك إلى فشل الوصول إلى صفحة الويب، مما يتسبب في تحديث المستخدمين، وبالتالي تفاقم الطلب على الموارد مثل وحدة المعالجة المركزية والذاكرة.
في الواقع، بالنظر إلى تطبيقات الويب الشائعة، يكون تنفيذ التعليمات البرمجية الديناميكية غير ضروري في كثير من الأحيان.
2. تصنيف ذاكرة التخزين المؤقت لآسيا والمحيط الهادئ
للتلخيص دون إذن، يمكن تقسيم ذاكرة التخزين المؤقت لـ asp إلى فئتين:
1. ملف ذاكرة التخزين المؤقت
يعتمد ما يسمى بالتخزين المؤقت للملفات على الحكم المنطقي بأن التنفيذ المحدد لـ ASP معين لن يتغير بشكل كبير خلال فترة زمنية، لذلك يتم تخزين المحتوى في شكل HTML ثابت، ومن ثم يتم استخدام تقنية إعادة توجيه الويب السماح للعميل بالوصول إلى الملفات الثابتة، لتلبية احتياجات تقليل وحدة المعالجة المركزية وموارد قاعدة البيانات وما إلى ذلك. هناك العديد من هذه التطبيقات، على سبيل المثال، تقوم العديد من المنتديات بإعادة إنشاء المنشور بالكامل إلى ملف ثابت عند الرد على منشور، ثم إعادة توجيهه، مثل منتدى donews.com. هناك أيضًا تأثير جانبي (فائدة) لكونه ثابتًا - حيث يمكن لمحركات البحث مثل Google إدراجه بسهولة. وقد اعتمدت بعض ما يسمى بأنظمة النشر الإخباري هذه التقنية.
2. ذاكرة التخزين المؤقت لجزء الملف
يعتمد ما يسمى بذاكرة التخزين المؤقت للملفات أيضًا على الحكم المنطقي. لن يتغير جزء معين من البيانات (يتم الحصول عليها عادةً عن طريق استعلام قاعدة بيانات كبيرة السعة ويتطلب موارد) خلال فترة زمنية معينة، حتى نتمكن من تخزين هذه البيانات في ملف. يمكن الحصول على البيانات عند الحاجة من خلال قراءة الملفات لتجنب زيادة العبء على قاعدة البيانات. على سبيل المثال، نقوم عادةً بتخزين بعض البيانات بتنسيق XML، ثم نستخدمها هذه هي الطريقة التي يتم بها التعامل مع منتدى CSDN.
3. ذاكرة التخزين المؤقت للذاكرة الرئيسية
بالإضافة إلى ذلك، يمكنك أيضًا التفكير في التخزين المؤقت في الذاكرة، وتخزين المحتوى الذي يتطلب الاستجابة في الوقت المناسب في الذاكرة، ونقله على الفور من وحدة التخزين السريعة بمجرد الحاجة إلى الوصول إليه. إذا كان هناك عدد كبير جدًا من متطلبات الوصول مركزة على بضع صفحات صغيرة أو إذا كانت الذاكرة الرئيسية كبيرة بما يكفي، فأعتقد أن استخدام التخزين المؤقت للذاكرة الرئيسية يمكن بالتأكيد تحسين أداء الوصول إلى الويب بشكل كبير.
3. كيفية تنفيذ/استخدام ذاكرة التخزين المؤقت
يجب مراعاة المشكلات التالية عند تنفيذ التخزين المؤقت:
1. ما هي الصفحات التي لن تتغير خلال فترة زمنية قصيرة؟
قم بتحليل موقعك بنفسك، هناك العديد من الصفحات مثل هذه. على سبيل المثال، عادةً ما يحتوي موقع الويب على أعمدة أخبار ومعلومات، وعادةً ما يتم نشر هذه الأعمدة بواسطة القائمين على الموقع في وقت معين من اليوم، ونادرًا ما يتم تغيير الصفحات بعد ذلك. إذن هذه الصفحات مناسبة للتخزين المؤقت للملفات الثابتة. في الواقع، هذا ما يفعله ما يسمى بنظام النشرات الإخبارية، لذا يمكنك أيضًا الرجوع إلى أفكار هذه الأنظمة لتحويل صفحات ASP الديناميكية الأصلية الخاصة بك.
2. يتم إنشاء تلك الصفحات بنفس المنطق لجميع الزوار (أي لا يتم تمييز الزوار).
بالإضافة إلى أعمدة مثل الأخبار والمعلومات حيث يرى جميع الزوار نفس الواجهة، يمكن بشكل عام تصميم التطبيقات المستهلكة للموارد مثل المنتديات لإنشاء منطق موحد (سيتم عرض نفس المنشور بنفس الطريقة من قبل ثلاثة أشخاص وثلاثة أشخاص). صفحات التطبيقات هذه، يمكننا أيضًا تحقيق ذلك باستخدام التخزين المؤقت الثابت. يمكنك أيضًا التفكير في تجزئة البيانات واستخدام تقنية البرمجة النصية لمعالجتها خارج إمكانات المعالجة الخاصة بالخادم، أي متصفح العميل.
3. تكاليف ومكاسب استخدام التخزين المؤقت.
الشيء الرئيسي هو مساحة لوقت (الاستجابة). استخدم تقنية التخزين المؤقت للمعالجة المسبقة للمحتوى المطلوب بشكل متكرر في المستقبل لتحسين استجابة خادم الويب، والأهم من ذلك، كسب استحسان الزوار.
والثمن هو أن الطلب على مساحة الويب يزداد، وفي الوقت نفسه، قد يتأثر تأثير الوصول.
لكنني أعتقد أن التخزين المؤقت المناسب له مزايا أكثر من عيوبه.
4. هذه الأماكن ليست مناسبة للتخزين المؤقت
في صفحة الاستعلام الديناميكية، يختلف محتوى الاستعلام لكل شخص، لذا تختلف نتائج العرض، لذلك من غير المحتمل تخزين نتائج الاستعلام مؤقتًا، لذا يكون التخزين المؤقت أكثر تعقيدًا واستخدام ذاكرة التخزين المؤقت منخفض، مما يؤدي إلى تكاليف إدارية عالية (على افتراض أنك قمت بالتخزين المؤقت 1000 كلمة رئيسية للاستعلام، ومن ثم فإن إدارة المراسلات بين هذه الكلمات الرئيسية وذاكرة التخزين المؤقت أمر مزعج أيضًا).
4. تحليل المثال
لنفترض أن التصميم الأصلي لمنتدى الاقتراحات هو كما يلي:
ضمن الدليل الجذر:
الصفحة الرئيسية default.asp، وعادةً ما يتم عرض النقاط البارزة والتوصيات وما إلى ذلك.
listBorad.asp يسرد هذا الملف أسماء ومقدمات جميع الأعمدة إذا كان يحمل المعلمة MainBID، فهذا يعني أنه سيتم إدراج الأعمدة الموجودة أسفل القسم.
listThread.asp إذا كان هذا الملف لا يحمل أي معلمات، فهذا يعني أن جميع المنشورات مدرجة، وإذا كان يحمل MainBID، فهذا يعني أن جميع المنشورات في كتلة معينة مدرجة. إذا تم حمل معرف فرعي، فهذا يعني إدراج المشاركات في أعمدة محددة. إذا تم تنفيذ معلمة الصفحة، فسيتم إدراج المواضيع في الصفحات.
يسرد ViewThread.asp محتوى المنشور. نفترض أن يتم عرض المنشور كتعليق، ويتم إدراج أي تعليقات في النهاية. معلمة المعرف هي المنشور الذي سيتم عرضه.
الرد.asp يستجيب لمنشور ويحمل معرف المعلمة للرد على منشور.
ولن تتم مناقشة الآخرين في الوقت الحالي.
مما سبق، يمكننا أن نرى أنه إذا تم كل شيء باستخدام ASP/PHP الأصلي، فإن تنفيذ كل ملف asp تقريبًا يتطلب عمليات قاعدة بيانات واستعلامات متكررة واستعلامات متعددة الجداول. يجب أن تعلم أن الاستعلام عن قاعدة البيانات سيؤدي في النهاية إلى انخفاض الأداء وسرعة الاستجابة، مما سيؤثر على تصفح الزوار البطيء ولا يؤدي إلى جودة الويب. والأهم من ذلك هو أنه بالنسبة لشخصين، A وB، إذا تمكنا من الوصول إلى ViewThread.asp وما شابه، وإذا كان المعرف هو نفسه، فسيشاهدان نفس المحتوى في كثير من الأحيان (رمز HTML الذي تتلقاه متصفحاتهما هو تقريبًا نفس المحتوى) نفسه)، ولكن بالنسبة لنفس المحتوى، يحتاج الخادم إلى فتح اتصالات قاعدة البيانات والاستعلام وقراءة السجلات وعرض السجلات وإغلاقها واتصالات قاعدة البيانات. . . . إذا قام عدد أكبر من الأشخاص بالوصول إلى العمليات التالية التي تستهلك موارد الخادم، فستكون النتيجة النهائية هي أن هؤلاء الأشخاص يستهلكون موارد الخادم بشكل أكبر. في الواقع، يمكن تجنب هذه الجهود المتكررة لنفس المحتوى باستخدام تقنية التخزين المؤقت للتحسين. على سبيل المثال:
بعد إرسال المحتوى في Response.asp، نستدعي على الفور الوظيفة الثابتة ونخزن محتوى المنشور بالكامل كملف html ثابت مثل viewThread_xxxx.htm في الظروف العادية، عند الوصول إلى viewThread.asp?ID=xxxx، يقوم النظام تلقائيًا بإعادة التوجيه إلى الملف الثابت المطابق viewThreadxxxx.htm. بهذه الطريقة، عندما لا يحتوي المنشور على أحدث إصدار، سيكون دائمًا محتوى ثابتًا مقدمًا للمشاهدين؛ بمجرد وجود إرسال جديد، سيتم تحديثه إلى الملف الثابت، وبهذه الطريقة، سيتم حفظ العديد من عمليات قاعدة البيانات وسيتم تحسين الاستجابة بشكل كبير.
يمكن أيضًا تنفيذ listBorad.asp بشكل ثابت. يمكننا تحليل المعلمات التي قد يحملها، وتعيين اسم ملف ذاكرة التخزين المؤقت إلى listBoard_xx.htm، وتحديث listBoard_xxx.htm عند إضافة أعمدة جديدة. يشبه listThread.asp، إلا أنه نظرًا لاحتوائه على المزيد من المعلمات، سيكون هناك الكثير من ملفات ذاكرة التخزين المؤقت. إذا كنت تريد تخزين listThread.asp مؤقتًا subBID=xxx&page=2، فإن الملف الثابت المقابل هو listThread_xxx_p2.htm. الشيء نفسه ينطبق على default.asp.
إذن كيف يمكنك معرفة متى يتم التحديث؟ متى سيتم تحديثه؟
عند مناقشة listThread.asp؟ subBID=xxx&page=2، نقوم باستخراج المعرف الفرعي والصفحة عند تنفيذ listThread.asp، ثم نكتشف ما إذا كان listThread_xxx_p2.htm موجودًا، وإذا لم يكن موجودًا، فاستدعاء وظيفة التوليد الثابتة لإنشاء الملف، وأخيرًا إعادة التوجيه هنا ملفات ثابتة. لاحظ أن الغياب هنا يعني أن هناك محتوى جديد يحتاج إلى التحديث.
فكيف تتسبب في عدم وجود الملف؟ يمسح. عندما ننشر منشورًا جديدًا، أو نحذف منشورًا، أو ننقل منشورًا، يمكننا حذف جميع الملفات الثابتة مثل listThread_xxx_p2.htm. يخبرك هذا بموعد التخزين المؤقت.
الآن بقي سؤال واحد، كيفية إنشاء ملفات ثابتة؟
ونلاحظ نفس ما ذكرناه من قبل. يمكننا عمل نسخة من default.asp وlistThread.asp وما إلى ذلك قبل التحويل، باسم default_d.asp وlistThread_2.asp وفي نفس الدليل (listThtrad.asp?s نظريًا ستكون نتيجة الوصول لـ ubID=123 وLISTtHREAD_D.ASP?SUBID=123 هي نفسها)، لذلك في المنطق الذي يحتاج إلى إنشاء ملفات ثابتة، نستدعي النسخة قبل التحويل من خلال طلب الوصول إلى الويب، ونحصل على كود html، ونخزنها بالنسبة للملفات الثابتة. إن طلب الويب هذا يعادل في الواقع قيام الخادم نفسه بعرض HTML الذي سيتم إخراجه قبل أن يصل أي متصفح حقيقي إلى المحتوى الثابت، ثم يقوم بإرجاع هذه الرموز وتخزينها كملفات ثابتة باستخدام وظيفة تشغيل الملف. بهذه الطريقة، يتم إنشاء ملف ذاكرة التخزين المؤقت قبل العارض الحقيقي.
من الصعب أن يمس هذا الحل التخطيط الأصلي، ولن يتسبب أبدًا في حدوث أخطاء مثل 404 بسبب التعديل. ثانيًا، ستساعد الملفات الثابتة أيضًا على فهرسة موقعك بسهولة بواسطة محركات البحث مثل Google. ولم لا؟
أخيرًا، تذكير، من خلال الوصول إلى الويب، في بيئة برمجة ASP، يستخدم العديد من الأشخاص مكون xmlHTTP للوصول، مما قد يسبب العديد من المشكلات. سيقوم xmlhttp نفسه بتخزين الموارد المطلوبة مؤقتًا، مما يجعل المحتوى الذي نطلبه من خلال هذا المكون ليس الأحدث، مما يسبب ارتباكًا منطقيًا. لذلك، يجب عليك اختيار كائن xml Server http أو مكون winhttp لتنفيذ موارد طلب الويب.
يمكن أن يؤدي استخدام تقنية التخزين المؤقت في ASP إلى تحسين أداء موقع الويب الخاص بك بشكل كبير، وفي الواقع، فإن طرق التنفيذ هذه بسيطة جدًا، وسوف تشرح كيفية عمل التخزين المؤقت على الخادم وكيف يمكنك استخدام طريقة تسمى تقنية اتصال ADO.
قبل تقديم هذه التقنيات، دعونا نشرح ما هي تقنية التخزين المؤقت لـ ASP بالضبط.
إن ما يسمى بذاكرة التخزين المؤقت هو في الواقع فتح مساحة في الذاكرة لحفظ البيانات. باستخدام ذاكرة التخزين المؤقت، لا يتعين عليك الوصول بشكل متكرر إلى البيانات التي تحفظها على القرص الصلب، يمكنك تجنب ذلك الضيق الناتج عن مشاهدة القرص الصلب المسكين ممتلئًا أشعر بالتعذيب من خلال قراءة البيانات. بمجرد تنفيذ استعلام ووضع نتائج الاستعلام في ذاكرة التخزين المؤقت، يمكنك الوصول بسرعة إلى البيانات بشكل متكرر. وإذا لم تقم بوضع البيانات في ذاكرة التخزين المؤقت، فعند تنفيذ الاستعلام مرة أخرى، سيقضي الخادم العملية في الحصول عليها وفرزها من قاعدة البيانات.
عندما يتم تخزين البيانات في ذاكرة التخزين المؤقت، فإن الوقت المستغرق في الاستعلام مرة أخرى هو بشكل أساسي وقت عرض البيانات.
بمعنى آخر، لا ينبغي لنا أن نضع البيانات التي تحتاج إلى التغيير بشكل متكرر في ذاكرة التخزين المؤقت للخادم، بل يجب أن نضع البيانات التي تتغير بشكل أقل ولكن يجب الوصول إليها بشكل متكرر في ذاكرة التخزين المؤقت.
سنناقش الآن كيفية استخدام ASP لتقنية التخزين المؤقت من جانب الخادم، ثم سنناقش كيفية استخدام ASP لها من جانب العميل.
تقنية التخزين المؤقت.
عندما يكون لديك كمية كبيرة من البيانات (الثابتة، أي أقل تغييرًا) التي تحتاج إلى عرضها للعميل، يمكنك التفكير في استخدام تقنية التخزين المؤقت من جانب الخادم. هذه التقنية مناسبة بشكل خاص لمواقع الويب ذات الاتساق القوي في أسلوب العرض (هاها، ليس من السهل استخدامها لمواقع الويب غير السائدة.)
في الواقع، طريقة التنفيذ بسيطة للغاية، ما عليك سوى إلقاء نظرة على المثال البسيط أدناه لفهمه.
هذا برنامج مثال لعرض فئات الكتب
ملف DisplayBooks.ASP:
< %@ LANGUAGE=JavaScript % >
<أتش تي أم أل>
<الجسم>
<طريقة النموذج=النشر>
تصنيف الكتاب؛ < %= getBooksListBox() % >
<ص>
<نوع الإدخال=إرسال>
<%
الدالة getBooksListBox()
{
BooksListBox = التطبيق(BooksListBox)
if (BooksListBox != null) return BooksListBox;
crlf = String.fromCharCode(13, 10)
BooksListBox = <select name=Books> + crlf;
SQL = حدد * من الكتب أو الترتيب حسب الاسم؛
cnnBooks = Server.CreateObject(ADODB.Connection);
cnnBooks.Open(Books, Admin,);
rstBooks = cnnBooks.Execute(SQL);
fldBookName = rstBooks(BookName);
بينما (!rstBooks.EOF){
BooksListBox = BooksListBox + <option> +
fldBookName + + crlf;
rstBooks.MoveNext();
}
BooksListBox = BooksListBox +
Application(BooksListBox) = BooksListBox
إرجاع BooksListBox؛
}
%>
الأمر بسيط للغاية، في الواقع، يستخدم تقنية تطبيقية بسيطة للغاية، والفرق هو جملة واحدة فقط:
Application(BooksListBox) = BooksListBox
يمكنك التحقق من ذلك وستجد أن عدد الطلبات على الخادم سينخفض كثيرًا. هذا الوضع مناسب بشكل خاص لمحتوى موقع الويب الذي لا يتم تحديثه بشكل متكرر، على سبيل المثال، تقوم بتحديثه مرة واحدة فقط في اليوم (أو لفترة طويلة).
بعد ذلك، سنناقش تقنية التخزين المؤقت من جانب العميل، وتسمى هذه التقنية أيضًا تقنية اتصال ADO غير المتصلة (مستوى الترجمة منخفض جدًا، لماذا يبدو الأمر محرجًا للغاية). تُستخدم هذه التقنية بشكل أساسي لحفظ المعلومات الشخصية للمستخدمين، مثل كلمات مرور المستخدم وأسماء الرموز وما إلى ذلك. يستخدم بشكل أساسي بعض خصائص ADO. وفي الوقت نفسه، فإنه يجيب أيضًا على السؤال الذي ذكره بعض مستخدمي الإنترنت حول ما إذا كان يمكن استخدام كائنات ADO في Applocation. الشرح غير واضح، دع الكود يتكلم:
الملف GLOBAL.ASA:
< !--METADATA TYPE=TypeLib FILE=C:/Program Files/Common
الملفات/النظام/ado/msado15.dll-->
< لغة البرنامج النصي = VBScript RUNAT = الخادم >
التطبيق الفرعي_OnStart
SQL = حدد اسم المستخدم وكلمة المرور من معلومات المستخدم
cnnUsers = DSN=User
تعيين rsUsers = Server.CreateObject(ADODB.Recordset)
'لاحظ أنه يتم استخدام الجملتين التاليتين لتنفيذ تقنية ADO التي تسمى قطع الاتصال المتاح.
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL، cnnAdvWorks، adOpenStatic، AdLockReadOnly
'افصل مجموعة السجلات عن قاعدة البيانات
rsCustomers.ActiveConnection = لا شيء
تعيين التطبيق (rsCustomers) = rsCustomers
نهاية الفرعية
FileUsers.ASP
<%
تتيح طريقة الاستنساخ لكل مستخدم أن يكون لديه مجموعة RecordsSet الخاصة به
قم بتعيين yourUsers = Application(rsUsers).Clone
تعيين اسم المستخدم = yourUsers(اسم المستخدم)
تعيين كلمة المرور = المستخدمين (كلمة المرور)
افعل حتى yourUsers.EOF
%>
اسم المستخدم: < %= اسم المستخدم % > كلمة مرور المستخدم: < %= كلمة المرور % >
<%
yourUsers.MoveNext
حلقة
%>
أما بالنسبة لدور التخزين المؤقت، فلا أعتقد أنني بحاجة إلى قول المزيد تسريع كفاءة التنفيذ ASP، مما يقلل الحمل على الخادم Dongwang هو الأكثر تميزًا في هذا الجانب، على سبيل المثال، أخذ الإصدار الحالي dvbbs7.1.0 استخدام ذاكرة التخزين المؤقت إلى مستوى أعلى فئة ذاكرة التخزين المؤقت للابن الضال للمدينة الضائعة:
<%
فئة Cls_Cache
'================== إرشادات للاستخدام ===================
'هذه الوحدة هي ابتكار أصلي لـ Dongwang Pioneer، المؤلف: Lost City Prodigal. إذا كنت تستخدم هذا النوع من الوحدات، فيرجى عدم إزالة هذا الوصف. هذا التعليق لا يؤثر على سرعة التنفيذ.
'الدور: فئة إدارة ذاكرة التخزين المؤقت وذاكرة التخزين المؤقت
'المتغير العام: وقت انتهاء صلاحية وقت إعادة التحميل (بالدقائق)، القيمة الافتراضية هي 14400
'MaxCount هو الحد الأقصى لقيمة الكائنات المخزنة مؤقتًا. إذا تم تجاوزه، فسيتم حذف الكائنات ذات الاستخدام الأقل تلقائيًا. القيمة الافتراضية هي 300
'CacheName هو الاسم الإجمالي لمجموعة ذاكرة التخزين المؤقت. القيمة الافتراضية هي Dvbbs. إذا كان هناك أكثر من مجموعة ذاكرة تخزين مؤقت في الموقع، فيجب تغيير هذه القيمة خارجيًا.
'السمة: الاسم يحدد اسم كائن ذاكرة التخزين المؤقت، وسمة الكتابة فقط.
'السمة: القيمة قراءة وكتابة بيانات ذاكرة التخزين المؤقت.
'الوظيفة: يحدد ObjIsEmpty() ما إذا كانت ذاكرة التخزين المؤقت الحالية قد انتهت صلاحيتها أم لا.
'الطريقة: يقوم DelCahe(MyCacheName) بحذف كائن ذاكرة التخزين المؤقت يدويًا، والمعلمة هي اسم كائن ذاكرة التخزين المؤقت.
'=========================
وقت إعادة التحميل العام، MaxCount، اسم ذاكرة التخزين المؤقت
LocalCacheName خاص، CacheData، DelCount
فئة فرعية خاصة_Initialize()
وقت إعادة التحميل = 14400 'وقت انتهاء الصلاحية (الوحدة: دقائق)
CacheName=Dvbbs 'الاسم الإجمالي لمجموعة ذاكرة التخزين المؤقت
نهاية الفرعية
مجموعة فرعية خاصة (SetName، NewValue)
التطبيق.القفل
التطبيق (SetName) = NewValue
Application.unLock
نهاية الفرعية
اسمحوا الملكية العامة (ByVal vNewValue) 'اسم كائن ذاكرة التخزين المؤقت
LocalCacheName=LCase(vNewValue)
نهاية الملكية
القيمة العامة للملكية (ByVal vNewValue) 'قراءة وكتابة بيانات ذاكرة التخزين المؤقت
إذا LocalCacheName<> ثم
CacheData=Application(CacheName&_&LocalCacheName)
إذا كان IsArray(CacheData) إذن
CacheData(0)=vNewValue
بيانات التخزين المؤقت(1)=الآن()
آخر
إعادة ديم ذاكرة التخزين المؤقت(2)
CacheData(0)=vNewValue
بيانات التخزين المؤقت(1)=الآن()
نهاية إذا
SetCache CacheName&_&LocalCacheName,CacheData
آخر
Err.Raise vbObjectError + 1، DvbbsCacheServer، يرجى تغيير اسم ذاكرة التخزين المؤقت.
نهاية إذا
نهاية الملكية
الملكية العامة تحصل على القيمة()
إذا LocalCacheName<> ثم
CacheData=Application(CacheName&_&LocalCacheName)
إذا كان IsArray(CacheData) إذن
القيمة=بيانات التخزين المؤقت(0)
آخر
Err.Raise vbObjectError + 1، DvbbsCacheServer، بيانات ذاكرة التخزين المؤقت فارغة.
نهاية إذا
آخر
Err.Raise vbObjectError + 1، DvbbsCacheServer، يرجى تغيير اسم ذاكرة التخزين المؤقت.
نهاية إذا
نهاية الملكية
الوظيفة العامة ObjIsEmpty() 'تحديد ما إذا كانت ذاكرة التخزين المؤقت الحالية قد انتهت صلاحيتها أم لا
ObjIsEmpty=صحيح
CacheData=Application(CacheName&_&LocalCacheName)
إذا لم يكن IsArray(CacheData)، فاخرج من الوظيفة
إذا لم يكن IsDate(CacheData(1)) ثم اخرج من الوظيفة
إذا كان DateDiff(s,CDate(CacheData(1)),Now()) < 60*Reloadtime ثم ObjIsEmpty=False
وظيفة النهاية
الخاص الفرعي makeEmpty(SetName) 'تحرير الذاكرة
التطبيق.القفل
التطبيق (اسم المجموعة) = فارغ
Application.unLock
نهاية الفرعية
Public Sub DelCache(MyCacheName) 'حذف ذاكرة التخزين المؤقت
makeEmpty(CacheName&_&MyCacheName)
نهاية الفرعية
نهاية الفصل
'تعيين WydCache=New Cls_Cache
'WydCache.Reloadtime=0.5' تحديد وقت انتهاء الصلاحية (بالدقائق)
'WydCache.CacheName=pages' تحديد اسم ذاكرة التخزين المؤقت
'IF WydCache.ObjIsEmpty() ثم ''تحديد ما إذا كان متاحًا (بما في ذلك انتهاء الصلاحية وما إذا كان فارغًا)
'Response.write WydCache.Value
'آخر
'.............
'BoardJumpList=xxx
'WydCache.Value=BoardJumpList' اكتب المحتوى
'Response.write BoardJumpList
'انتهى إذا
'
'mycache.DelCache(اسم ذاكرة التخزين المؤقت) يحذف ذاكرة التخزين المؤقت
%>