2010-05-19 10 views
5

में 'कैशिंग' एक बड़ी तालिका 'मैं समझता हूं कि प्रत्येक पृष्ठ रीफ्रेश, विशेष रूप से' अजाक्सलैण्ड 'में, मेरे बैक-एंड/कोड-बैक क्लास को खरोंच से बुलाया जाता है ... यह एक समस्या है क्योंकि मेरा कक्षा (जो System.Web.UI.Page में सदस्य ऑब्जेक्ट है) में बहुत सारे डेटा हैं जो डेटाबेस से स्रोत हैं। तो अब अजाक्सलैण्ड में हर पृष्ठ रीफ्रेश करने से मुझे कक्षा से ऑब्जेक्ट से पुन: उपयोग करने के बजाय बड़ी बैकएंड डीबी कॉल करने का कारण बन रहा है। इसके लिए कोई फिक्स? क्या यह सत्र चर खेलने में आता है? क्या सत्र चर एकमात्र विकल्प है जो मुझे किसी ऑब्जेक्ट में एक ऑब्जेक्ट को बनाए रखने के लिए है जो एकल-उपयोगकर्ता और सिंगल-सत्र उदाहरण से जुड़ा हुआ है?एएसपी.नेट

+0

प्रत्येक पृष्ठ रीफ्रेश पृष्ठ को (पुन:) मूल्यांकन करने का कारण बनता है, इस पर ध्यान दिए बिना कि AJAX का उपयोग किया जा रहा है या नहीं। आपका AJAX कोड पूरे पृष्ठ को रीफ्रेश नहीं करना चाहिए, इसे क्लाइंट-साइड * पर प्रासंगिक डेटा * का पुन: उपयोग करना चाहिए (यानी [सर्वर] स्मृति में .NET ऑब्जेक्ट के रूप में नहीं)। –

उत्तर

1

ASP.NET के लिए विभिन्न कैशिंग प्रणाली पर इस एमएस article पर एक नजर डालें। "सर्वर मेमोरी में कैश मनमानी ऑब्जेक्ट्स" नामक एक अनुभाग है जो आपकी रूचि रख सकता है।

0

जब से तुम अजाक्स का उल्लेख है, मुझे लगता है कि आप निम्नलिखित बातों पर विचार करना चाहते हो सकता है:

मान लें इस बड़े डेटा सेट, स्थिर और क्षणिक नहीं है अजाक्स के लिए पहली कॉल में, अपने अनुप्रयोग डेटाबेस क्वेरी करता, बहुत सारे को पुन: प्राप्त डेटा और क्लाइंट को लौटाता है (यानी ब्राउजर पर चल रहे ब्राउज़र/जावास्क्रिप्ट, इत्यादि), क्लाइंट में अब सब कुछ मेमोरी में है। इसके बाद, उसी क्लाइंट के लिए सर्वर पर वापस जाने की आवश्यकता नहीं है जिसे आपके क्लाइंट में पहले से ही स्मृति में है। आपको डोम या जो कुछ भी पुनर्निर्माण करने के लिए जावास्क्रिप्ट का उपयोग करना है। इस बिंदु से ग्राहक पर सभी किया जा सकता है।

अब मान लें कि डेटा स्थैतिक लेकिन क्षणिक नहीं है, सर्वर पर उन्हें पकड़कर कैशिंग है, सत्र वह समाधान नहीं होगा जिसे आप वैसे भी चाहते हैं। प्रत्येक बार जब आपका ग्राहक सर्वर से अनुरोध भेजता है, और सर्वर केवल कैश (सत्र) में जो देता है, वह डेटा पहले से ही पुराना होता है और क्लाइंट में पहले से मौजूद डेटा से कोई फर्क नहीं पड़ता है।

बिंदु यह है कि डेटा स्थिर है, तो आपके पास पहले से ही स्मृति में डेटा होने के बाद सर्वर पर राउंड ट्रिप सहेजें। यदि डेटा क्षणिक है, तो मुझे डर है कि डेटा को फिर से पूछताछ या फिर से पुनर्प्राप्त करने के अलावा कोई सस्ता समाधान नहीं है, और सब कुछ वापस क्लाइंट को भेजें।

2

यदि आपका डेटा उपयोगकर्ता-विशिष्ट है तो Session जाने का रास्ता होगा। सावधान रहें यदि आपके पास वेब फार्म या वेब बाग है। इस स्थिति में आपको अपने सत्र के लिए सत्र सर्वर या डेटाबेस की आवश्यकता होगी।

यदि आपका डेटा एप्लिकेशन-स्तर है तो Application Data Cache जाने का तरीका हो सकता है। सावधान रहें यदि आपके पास सीमित रैम है और आपका डेटा बहुत बड़ा है। कैश एक अयोग्य क्षण में खुद को खाली कर सकता है।

किसी भी तरह से, आपको यह जांचने की आवश्यकता होगी कि आपका एप्लिकेशन आपके परिवर्तनों के साथ कैसा प्रदर्शन करता है। आप कम से कम खराब विकल्प होने के लिए डेटाबेस पर वापस जा सकते हैं।

इसके अलावा, आप इसे कम से कम भारी बनाने के लिए Lazy Loading पर कुछ डेटा देख सकते हैं।