سؤال

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

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

على سبيل المثال.

[IncrementViewCountFilter(Order=1)]
[OutputCache(Duration=60,Order=2)]
public ActionResult Index(int questionId)
{ ... }

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

أعتقد أن المشكلة التالية هي أن IncrementViewCountFilter لن يعرف شيئًا عن معرف السؤال، فكيف سيعرف ما يجب زيادته (لأنه يتم تنفيذه قبل تنفيذ رمز الفهرس الرئيسي).

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

أي شخص لديه أي أفكار؟

هل كانت مفيدة؟

المحلول

حسنًا، لديك بعض الخيارات.

التخزين المؤقت دونات

أحد الخيارات من جانب الخادم هو "التخزين المؤقت للدونات". التخزين المؤقت دونات يسمح بتخزين معظم الصفحة مؤقتًا، وعدم تخزين أجزاء من الصفحة مؤقتًا (الفتحة الموجودة في منتصف الكعكة).التخزين المؤقت دونات موصوف هنا, ، ولقد استخدمته بنجاح كبير.

تعقب على أساس الصور

خيار آخر هو وجود صورة على الصفحة فعليًا تحميل إجراء من جانب الخادم يسجل النتيجة.هذا من شأنه أن يبدو

<img src="/controller/action"> 

على الصفحة، حيث العمل يخدم صورة فارغة في نهايةالمطاف.

التتبع من جانب العميل

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

http://www.domain.com/home/action

والمتعقب قيد التشغيل

http://www.domain.com/tracking/action

عندها يجب أن تكون بخير.

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

نصائح أخرى

ومرشح يمكن الحصول على questionId من ActionExecutingContext.ActionParameters، التي يتم تمريرها إلى OnActionExecuting. أما بالنسبة التخزين المؤقت التهم ضرب، وأيضا، استخدام ذاكرة التخزين المؤقت. :)

ويمكنك أيضا استخدام HttpModule الذي هو خيار جيد لأنه يمكن استخدامها لصفحات وغيرها من الأصول التي لا تستخدم خط أنابيب MVC. يمكنني استخدام مزيج من دونات التخزين المؤقت (http://mvcdonutcaching.codeplex.com/)، عامل تصفية MVC وHttpModule لتسجيل جميع أنواع تحليلات لصفحات المخزنة مؤقتا.

وأنا لا أعرف عن الجانب MVC ولكن إذا كنت تفعل هذا في لدت WebForms هذا يبدو أنه سيكون مرشحا ل<لأ href = "http://tinyurl.com/donutcaching" يختلط = "نوفولو noreferrer" > الانتاج مخبأ استبدال الملقب دونات التخزين المؤقت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top