2009-02-16 10 views
7

मैं कुछ आइटमों के लिए लंबे समय तक समाप्त करने में सक्षम होना चाहता हूं जो उपयोगकर्ता जीईटी अनुरोध के माध्यम से डाउनलोड करते हैं।एएसपी.नेट एमवीसी में एक्सपियर हेडर के साथ कैसे काम करना सबसे अच्छा है?

मैं कहना चाहता हूं कि 'यह 10 मिनट के लिए अच्छा है' (यानी मैं +10 मिनट के लिए एक्सपियर हेडर सेट करना चाहता हूं)। अनुरोध HTML के टुकड़े हैं जिन्हें पृष्ठ में AJAX के माध्यम से प्रदर्शित किया जा रहा है और वे उपयोगकर्ता के सत्र के लिए अच्छे हैं। मैं सर्वर पर वापस नहीं जाना चाहता हूं और 304 प्राप्त कर सकता हूं यदि उन्हें दोबारा ज़रूरत है - मैं चाहता हूं कि ब्राउजर कैश तुरंत मुझे वही आइटम दे।

मुझे एक लेख मिला जो लगभग MVC Action filter caching and compression के बारे में लगभग एक वर्ष पुराना है। यह समाप्त हो गया हैडर बदलने के लिए एक कस्टम ActionFilter बनाता है। मैं पहले ही संपीड़न फ़िल्टर का उपयोग कर रहा हूं जो कुछ कस्टम सीएसएस के लिए बहुत अच्छा काम करता है जो मैं उत्पन्न कर रहा हूं (94% संपीड़न दर!)।

1) मैं वास्तव में इस विधि का उपयोग करने के लिए है:

मैं दो मुख्य चिंता है। अगर मैं ऐसा करता हूं, तो मैं इसके साथ ठीक हूं, लेकिन क्या मेरे लिए ऐसा करने के लिए एमवीसी या आउटपुट कैश कार्यक्षमता में वास्तव में कोई कार्यक्षमता नहीं है? 'पारंपरिक' एएसपी.नेट में मैंने हमेशा एक्सपियर हेडर मैन्युअल रूप से सेट किया है, लेकिन हम अब और नहीं कर सकते - कम से कम नियंत्रक में नहीं।

2) यदि मैं इस फ़िल्टर विधि का उपयोग करता हूं - क्या यह आउटपुट कैश नीति में हस्तक्षेप करने जा रहा है - जिसे मैं web.config में नियंत्रित करने में सक्षम होना चाहता हूं। मैं सोच रहा हूं कि दोनों पारस्परिक रूप से अनन्य हैं और आप दोनों नहीं चाहते हैं - लेकिन मुझे पूरी तरह से यकीन नहीं है।

उत्तर

3
  1. नहीं, आप इस विधि का उपयोग करने के लिए नहीं है। हालांकि, मुझे लगता है कि यह शायद चुनने का सबसे अच्छा तरीका है, क्योंकि यह नियंत्रक को अधिक टेस्टेबल और कम वेब-जागरूक बनाता है। विकल्प नियंत्रक में मैन्युअल रूप से हेडर सेट करना होगा, जैसे:

    प्रतिक्रिया। एडहेडर ("समाप्त हो जाता है", "गुरु, 01 दिसंबर 1 99 4 16:00:00 जीएमटी");

  2. ठीक है, आउटपुट कैश विशेषता नियंत्रण तब होती है जब कार्रवाई बिल्कुल चलती है, और जब यह कैश किए गए HTML को लौटाती है। एचटीएमएल को फिर से लाने के लिए ब्राउज़र की समयसीमा बताती है। तो मैं उन्हें पारस्परिक रूप से अनन्य नहीं कहूंगा, लेकिन वे निश्चित रूप से एक ही सिक्के के दो पक्ष हैं, और आपको यह सोचने का अधिकार है कि दोनों की आवश्यकता नहीं है। मैं आपके आवेदन के लिए सबसे उपयुक्त क्या है यह तय करने के लिए the HTTP spec की समीक्षा करने का सुझाव दूंगा।

+0

आपके इनपुट के लिए धन्यवाद @craig। मुझे लगता है कि # 2 के बारे में अंगूठे का नियम यह है कि यदि जेनरेट किया गया दृश्य बहुत आसान है (यानी कोई डेटाबेस एक्सेस नहीं है) तो समाप्त होने वाली सभी चीजें समाप्त हो सकती हैं। यदि दस वेब विधि कॉल की आवश्यकता है तो आप आउटपुट कैश का उपयोग करना चाहेंगे। कभी-कभी आप सिर और पूंछ सही चाहते हैं :-) –

+3

विचार करें: यदि 10 लोग (विभिन्न कंप्यूटरों पर) आपके पृष्ठ को प्रत्येक बार 10 बार अनुरोध करते हैं, तो स्वयं ही समाप्त हो जाता है कि आपका कार्य 10 बार चलता है और सर्वर 10 अनुरोधों को संभालता है। अकेले कैशिंग का मतलब है कि आपकी कार्रवाई एक बार चलती है और सर्वर 100 अनुरोधों को संभालता है। एक साथ समाप्त हो जाती है और कैशिंग का मतलब है कि आपकी कार्रवाई एक बार चलती है और सर्वर 10 अनुरोधों को संभालता है। –

2

Response.Expires यह गुण से पहले ब्राउज़र में एक पृष्ठ कैश्ड मिनट की संख्या निर्दिष्ट करता है यानी समाप्त हो रहा है। यदि उपयोगकर्ता निर्दिष्ट पृष्ठ से पहले एक ही पृष्ठ पर लौटाता है तो पृष्ठ का कैश संस्करण प्रदर्शित होता है।

Response.ExpiresAbsolute इस संपत्ति का उपयोग करते हुए हम पर जो पेज कैश्ड ब्राउज़र में समाप्त हो रहा तिथि और/या समय सेट कर सकते हैं।

http://forums.asp.net/t/1532229.aspx

0

ऐसा लगता है कि तुम सिर्फ उपयोगकर्ता के हिसाब से बदलती की जरूरत है:

http://aspadvice.com/blogs/ssmith/archive/2007/10/29/VaryByCustom-Caching-By-User.aspx

[OutputCache(Duration="10", VaryByCustom="username")] 

Global.asax:

public override string GetVaryByCustomString(HttpContext context, string key) 
{ 
    switch(key) 
    { 
     case "username": 
      return context.User.Identity.Name; 

     // Other VaryByCustom strategy implementations can go here. 
    } 

    return string.Empty; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे