2010-11-04 17 views
9

मैं वर्तमान में cp में asp.net mvc 2 का उपयोग कर एक वेब साइट विकसित कर रहा हूं। मैंने कभी भी एमवीसी में कैशिंग सुविधा का उपयोग नहीं किया है और इसे उपयोगकर्ता प्रोफाइल पेज पर लागू करना चाहते हैं। इस पृष्ठ की सामग्री शायद ही कभी बदलती है और रीयलटाइम में होने वाला एकमात्र हिस्सा उपयोगकर्ता द्वारा हालिया पोस्ट की सूची है। (मैं डेटाबेस से डेटा लोड करने के लिए linq-to-sql का उपयोग करता हूं)Asp.net एमवीसी 2 कैशिंग

मुझे कुछ सुझावों की आवश्यकता है कि मुझे किस कैशिंग तकनीक का उपयोग करना चाहिए और इसे कैसे कार्यान्वित किया जाए?

अद्यतन: एक्सडी का समाधान लगभग काम करता है, सिवाय इसके कि मैं डेटा में पास नहीं कर सकता। मैं इसका उपयोग कैसे करूँगा? एचटीएमएल। रेंडरपार्टियल ("यूजरपोस्ट्स", व्यूडाटा ["यूजरपोस्ट्स"])

+0

यह भी देखें http://stackoverflow.com/questions/4082826/when-and-how-to-go-about-performing-caching-in-asp-net-mvc/4091232#4091232 –

+0

किसी को भी इसका जवाब पता है? मेरे अपडेट के लिए? – Rana

+0

आपको रेंडरपार्टियल (http://msdn.microsoft.com/en-us/library/dd470561.aspx) के लिए चौथे ओवरलोड का उपयोग करने की आवश्यकता है: 'Html.RenderPartial ("UserPosts.ascx", Model.UserPosts, new ViewDataDictionary {मॉडल = Model.UserPosts} ' – RPM1984

उत्तर

1

एएसपी.Net में tutorial on output caching for MVC है।

Partial (aka Donut) Caching जो एमवीसी 2 के लिए काम करेगा।

+0

हां, मैंने उसे भी देखा। लेकिन इसका हिस्सा बनाते समय मैं कैश कैसे कर सकता हूं कैश नहीं?आंशिक कैशिंग के बारे में उस वार्ता का अगला पृष्ठ – Rana

+0

। http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs – xandy

+0

क्या यह अभी भी एमवीसी 2 में पसंदीदा तरीका है? – Rana

5

फिल हैक का fragment caching tricks अब एमवीसी 2 में काम नहीं करता है।

StackOverflow हम पाठ के रूप में एचटीएमएल टुकड़े का निर्माण और HttpRuntime.Cache and more.

5

के रूप में अन्य उत्तर कहा है, डोनट कैशिंग MVC में काम करता है "की तरह" का उपयोग कर उन्हें कैश।

मैं यह सिफारिश नहीं होगा - के बजाय मैं एक alterantive प्रदान करेंगे:

आप उपयोगकर्ताओं के लिए एक दृश्य प्रोफ़ाइल है, यह "UserProfile.aspx" कहते हैं।

अब इस दृश्य पर, आपके पास "हालिया पोस्ट" के लिए एक अनुभाग सहित HTML का एक गुच्छा है।

अब, मुझे लगता है कि यह उपयोगकर्ता के लिए अंतिम 10 पोस्ट की तरह कुछ है।

क्या मैं करना एक आंशिक दृश्य में यह HTML/अनुभाग डाल दिया है होता है, और एक अलग कार्रवाई विधि के माध्यम से सेवा करते हैं, उर्फ ​​एक PartialViewResult:

public class UserProfileController 
{ 
    [HttpGet] 
    [OutputCache (Duration=60)] 
    public ActionResult Index() // core user details 
    { 
     var userProfileModel = somewhere.GetSomething(); 
     return View(userProfileModel); 
    } 

    [HttpGet] 
    public PartialViewResult DisplayRecentPosts(User user) 
    { 
     var recentPosts = somewhere.GetRecentPosts(user); 
     return PartialViewResult(recentPosts); 
    } 
} 

का उपयोग कर आंशिक दृश्य बाहर प्रस्तुत jQuery:

<script type="text/javascript"> 
    $(function() { 
    $.get(
     "/User/DisplayRecentPosts", 
     user, // get from the Model binding 
     function (data) { $("#target").html(data) } // target div for partial 
    ); 
    }); 
</script> 

इस तरह, आप कोर विवरण (इंडेक्स()) के लिए आउटपुट कैश को अधिकतम कर सकते हैं, लेकिन हाल के पोस्ट कैश नहीं किए गए हैं। (या आप एक बहुत छोटी कैश अवधि हो सकती है)।

आंशिक प्रतिपादन की jQuery विधि रेंडरपार्टियल से अलग है, इस तरह आप सीधे नियंत्रक से HTML की सेवा कर रहे हैं, ताकि आप तदनुसार आउटपुट कैशिंग को नियंत्रित कर सकें।

अंतिम परिणाम डोनट कैशिंग (पेज कैश किए गए पृष्ठ के कुछ हिस्सों, अन्य नहीं) के समान ही है।

+1

तो जावास्क्रिप्ट के बिना ग्राहकों के बारे में क्या? – xandy

+2

क्या ओपी ने कहा था? – RPM1984

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