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

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

  

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

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

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

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

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

 المصدر : / العميل / مخطوطات / jaxson / Common.js الدالة Asynchronous_call (طلب) (مثيل فار = هذا ، وإذا (! this.settings) (رمي خطأ جديدا ( "إعدادات لم يتم تعريف") ؛) إذا كان (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (رمي خطأ جديدا ( "الطلب النشط حاليا لا يمكن ان يستمر") ؛) this.xmlhttp.open (request.action ، Request.Url ، صحيح ، this.settings.username ، هذا . settings.password) ؛ globals.info ( "فتح" طلب + Request.Url) ، وإذا كان (request.headers) (ل(defHeader في request.headers) (this.xmlhttp.setRequestHeader (defHeader ، request.headers [defHeader] ) ؛)) إذا كان (this.settings.headers) (ل(defHeader في this.settings.headers) (this.xmlhttp.setRequestHeader (defHeader ، this.settings.headers [defHeader]) ؛)) this.settings.url = Request.Url ؛ إذا كان (this.cache.processAndBreakBeforeRequest (this.xmlhttp ، الطلب ، this.settings) == صحيحا) ( globals.info ( "البيانات التي تم استردادها من ذاكرة التخزين المؤقت للطلب" + instance.settings.url) ؛ عودة ؛ )this.xmlhttp.onreadystatechange = الدالة () (اذا (instance.xmlhttp.readyState == 4) (globals.info ( "البيانات التي وردت لطلب" + instance.settings.url) ؛ إذا كان (instance.cache.processAndBreakAfterRequest (instance.xmlhttp ، الطلب ، instance.settings) == صحيحا) ( عودة ؛ )حاول (instance.settings.onComplete (instance.xmlhttp) ؛) الصيد (ه) (globals.errorHandler (ه) ؛))) (محاولة this.xmlhttp.send (request.data) ؛) الصيد (ه) (غلوبالس. errorHandler (ه) ؛))

رمز غير متزامن تشبه الى حد بعيد ما تم عرضه في المادة (4). الأجزاء الجديدة هي في جريئة. ربط مخبأ في غير متزامن من السهل : انت بحاجة الى القبض على طلب قبل إرسالها ، ثم قبض على الاستجابة عند وصولها. غير المتزامن لا يطبق على مخبأ ، لأن هناك طرقا كثيرة لرمز على مخبأ. استراتيجية ذكية ، واختيار واحد من غير متزامن ، هو تفويض يدعو إلى أسلوب آخر. وفي حالة القبض على طلبها ، على طريقة ما يسمى this.cache.processAndBreakBeforeRequest. وXMLHttpRequest ، طلب ، وإعدادات مثيل متزامن يتم تمريرها إلى الأسلوب. إذا كان الأسلوب بإرجاع صحيح ، ثم يعود Asynchronous_call على الفور. بالعودة الفورية وعادة ما يشير إلى أن البيانات في ذاكرة التخزين المؤقت ، ولكنها يمكن أن تستخدم أيضا لوقف هذا الطلب.

في حالة الاستيلاء على رد ، في إطار تنفيذ onreadystatechange هو طلب إلى الأسلوب instance.cache.processAndBreakAfterRequest. ثلاث معلمات تمريرها إلى الأسلوب : مثيل XMLHttpRequest ، طلب ، والإعدادات. استنادا إلى هذه المعايير الثلاثة ، المخبأ يمكن تخزين البيانات استجابة ليمكن استرجاع في مرحلة لاحقة. إذا processAndBreakAfterRequest إرجاع الأسلوب الصحيح ، ثم البيانات الاستجابة لا يتم إرسالها إلى الأسلوب onComplete. عموما ، فإنك لن تفعل ذلك ، ولكنه ضروري إذا كنت تنفيذ مخبأ التحقق من صحة النص المتشعب.

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

 المصدر : / العميل / مخطوطات / jaxson / Common.js فار CacheController = (_Cache : صفيف الجديد () ، وظيفة CachedProcessAndBreakBeforeRequest) (الطلب ، إعدادات) (اذا (request.action == "الحصول على") (فار الكائنات = CacheController._cache [الإعدادات . رابط] ، وإذا كان (الكائنات! = فارغة) (فار fakeXMLHttp = (المركز : 200 ، statusText : obj.StatusText ، responseText : obj.ResponseText ، responseXML : obj.ResponseXML) (محاولة settings.onComplete (fakeXMLHttp) ؛) الصيد ( ه) (globals.errorHandler (ه) ؛ عودة كاذبة) العودة الحقيقية ؛)) عودة كاذبة ؛) الدالة CachedProcessAndBreakAfterRequest (xmlhttp ، طلب والإعدادات) (اذا (xmlhttp.status == 200 & & request.action == "الحصول على") (CacheController._cache [settings.url] = (الحالة : xmlhttp.status ، StatusText : xmlhttp.statusText ، ResponseText : xmlhttp.responseText ، ResponseXML : xmlhttp.responseXML) ؛) عودة كاذبة ؛)

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

وحيد طلب العميل مخبأ الجانب ليس من الذكاء وإرجاع كائن إذا كان موجودا في ذاكرة التخزين المؤقت ، وإلا فإنه استعلامات ملقم المتشعب. وظيفة CachedProcessAndBreakBeforeRequest يسمى قبل تزامني يجعل طلب البدنية. عندما يتم استدعاء الدالة ، وجود رابط يتم اختباره في الكائن CacheController._cache. إذا كان عنوان غير موجود ، ثم يتم إرجاع زائفة ، مشيرا إلى أن عنوان يجب ان يعدموا. إذا كان عنوان موجود ، ثم كائن موجود مؤقتا. وجود كائن مؤقتا يعني أنه ليس من الضروري دعوة خادم ، ورمز لطريقة onComplete يمكن استدعاؤها مباشرة. والمشكلة الوحيدة مع كائن مؤقتا هو أنه لا يوجد مثيل XMLHttpRequest المتاحة.

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

الجزء الآخر إلى رمز مخبأ هي وظيفة CacheProcessAndBreakAfterRequest ، والذي يستخدم لإضافة كائن مؤقتا دخول. إضافة الكائن إلى مخبأ مقيدة إلى المتشعب رمز الحالة 200 ، والنص المتشعب الحصول عليها. إذا كان الكائن يضاف إلى مخبأ ، ثم الخاصية XMLHttpRequest ، والوضع ، statusText ، responseText ، وresponseXML يتم حفظها. إذا كنت تريد إنشاء التنفيذ الكامل لأهداف وهمية XMLHttpRequest إنقاذ رؤوس المتشعب ، فإن عليك أن تضع مدونة في وظيفة CacheProcessAndBreakAfterRequest. كبديل لذلك ، كنت قد تميل لحفظ إشارة إلى مثيل XMLHttpRequest. والمشكلة هي أنه مخبأ ليست في السيطرة على سبيل المثال XMLHttpRequest ، وذلك عن طريق توفير مرجع ، وانك لم إنقاذ البيانات ، كما في المثال غير متزامن على سبيل المثال يمكن إعادة استخدام XMLHttpRequest لطلب آخر. ولذلك ، كلما كان ذلك تنفيذ التخزين المؤقت الخاص بك ، فإنك تحتاج لنسخ المعلومات التي يجب حفظها في ذاكرة الهاتف.

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

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

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

مقال مقدم من سونيا Lande


تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات.
المهم : هذه المادة "إدارة البيانات باستخدام ذاكرة التخزين المؤقت عميل باستخدام اجاكس" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.


Online: 308 users browsing the articles directory