2009-06-30 11 views
6

में फंस कर रहा हूँ मैं एक बहुत बड़ी समस्या है। मुझे लगता है मैं नियंत्रण DevExpress.com पर मेरी पूरी परियोजना और UpdatePanels के उपयोग आधारित है ASP.NET 3.5मैं UpdatePanel जाल

में एक सीआरएम (Costumer संबंध प्रबंधन) सिस्टम बनाने रहा हूँ।

अब मेरी पृष्ठ, जो पूरी व्यवस्था में एक केंद्रीय पेज है में से एक, संभावनाओं की एक बहुत बड़ी राशि है और इसलिए UserControls का एक बड़ा मात्रा में होता है।

अब मेरी समस्या यह है कि क्योंकि यह सच वास्तव में बहुत धीमी गति से हो रही है कि UpdatePanels पूरे पृष्ठ reposting कर रहे हैं और न केवल अद्यतन पैनल है। पहले एक पॉपअप विंडो प्रकट होता है :(

हम कुछ समय 3-4 सेकंड बात कर रहे हैं वहाँ किसी भी तरह से मैं मेरी गर्दन को तोड़ने के बिना UpdatePanels से दूर इस पूरे सिस्टम refactor कर सकते हैं है? रहे हैं वहाँ वैसे भी मैं UpdatePanels के अपने उपयोग का अनुकूलन कर सकते हैं?

ViewState भी पूरी तरह से विशाल है।

किसी भी अच्छा विचारों का स्वागत है ...

+0

मुझे लगता है कि मैं क्या पूछ रहा हूं, क्या अपडेटपेनल केवल नए पृष्ठ को प्रस्तुत करने का कोई तरीका नहीं है। –

उत्तर

8

वहाँ UpdatePanels का उपयोग कर पूरे पृष्ठ पोस्टिंग से बचने के लिए कोई रास्ता नहीं है। यहाँ एप्लिकेशन की पुनः रचना के एवज में कुछ चीज़ें हैं मैं कोशिश करता हूं:

  1. किसी भी नियंत्रण होता है जो की जरूरत नहीं है के लिए अक्षम viewstate यह
  2. सेट UpdateMode = अपने उपयोगकर्ता नियंत्रण के लिए "सशर्त"। यह पूरे पृष्ठ को पोस्ट करने के आसपास नहीं मिलेगा, लेकिन यह थोड़ा सा समय प्रस्तुत करने पर कट जाएगा। केवल विशिष्ट अद्यतन पैनेल के लिए सामग्री ब्राउज़र में अपडेट की जाएगी।
  3. सुनिश्चित करें कि आपके उपयोगकर्ता नियंत्रण में छोटी आईडी हैं। एचएसएमएल में एएसपी.NET वेबफॉर्म नामों के नियंत्रण के तरीके से इन आईडी को बहुत अधिक बार दोहराया जाता है यदि आपके पास बहुत सारे सर्वर नियंत्रण हैं। मास्टर पेज प्लेसहोल्डर्स नामकरण के लिए भी यही है। मैंने एक बार उपयोगकर्ता नियंत्रण और प्लेसहोल्डर्स का नाम बदलकर आधे आकार में एक बड़ा पृष्ठ काट दिया।
+0

एलओएल मैंने नामकरण मुद्दे पर विचार नहीं किया, हालांकि यह निश्चित रूप से वहां है .. हां उन्हें बहुत बार दोहराया जाता है लेकिन मुझे छोटे नामों से कम नफरत है ... अब मुझे सिर्फ यह विचार करना होगा कि मुझे धीमी गति से लोड होने से नफरत है .. –

+0

आप इसे स्पष्ट करना चाहते हैं: "केवल विशिष्ट उपयोगकर्ता नियंत्रण स्क्रीन पर अपडेट किया जाएगा।" यह शायद "केवल विशिष्ट अद्यतन पैनेल ..." होना चाहिए। आप यह भी ध्यान रखना चाहेंगे कि पूरे पृष्ठ के विपरीत, केवल आवश्यक पैनल क्लाइंट को ही भेजे जा रहे हैं। लघु आईडी के लिए –

+0

+1। यह बहुत निराशाजनक है कि मेरे पृष्ठ को अनुकूलित करने के आधे अनुरोध को समझने के लिए तत्व आईडी का है: masterpage_page_form_usercontrol_nestedusercontrol_gridview_label इत्यादि आदि –

0

आप वास्तविक AJAX के साथ अपने अद्यतन पैनल में निहित Postbacks में से कुछ को बदलने के लिए कॉल, यानी डेटा है कि सर्वर के लिए कार्रवाई के लिए आवश्यक है भेजने केवल है और वापस मिलेगा केवल क्या आवश्यक है दृश्य को अपडेट करने के लिए, पोस्टबैक और अपडेटपेनल से छुटकारा पाएं।

(आप 'एक्शन' और 'व्यू' शब्द का उपयोग देखेंगे - हाँ, मैं एक एमवीसी प्रशंसक हूं। जिस स्थिति में आप हैं, वह गड़बड़ी है जो आसानी से वेबफॉर्म और एएसपी का उपयोग करने में मिलती है .NET AJAX नियंत्रण।)

+0

ब्लॉक पर नए बच्चे के बारे में एक बड़ा प्रशंसक होना आसान है :) मुझे यकीन है कि किसी भी ढांचे में गन्दा कोड लिखना आसान है। – kervin

+0

हां, यह निश्चित रूप से संभव है। वेबफॉर्म में समस्या यह है कि 'हैलो वर्ल्ड' पृष्ठ पहले से ही गन्दा दिखता है! –

0
  • मुझे कुछ याद आना चाहिए। आपका अपडेट पैनेल पूरे पृष्ठ को फिर से लोड क्यों कर रहा है। एक अपडेट पैनेल का बिंदु केवल उस पैनल में क्या ताज़ा करना है, है ना? स्पष्टीकरण के लिए धन्यवाद। मुझे लगता है कि हम पेज को दोबारा पोस्ट करने के बारे में बात कर रहे हैं और मैंने सोचा था कि पैनल को फिर से नहीं खींचा जा रहा है।

  • कोशिश ViewState को बंद करने, विशेष रूप से ग्रिड के लिए।

  • नियंत्रण किस तरह अपने पृष्ठ पर सबसे आम है?अपने खुद के हल्के UserControl या सर्वर नियंत्रण के साथ उन है कि ViewState या ControlState
+1

अपडेटपेनल्स केवल पैनल के अंदर सामग्री को रीफ्रेश करते हैं, लेकिन पूरे पृष्ठ लाइफसाइक्ल को निष्पादित किया जाता है - जिसका अर्थ है कि सभी नियंत्रणों के लिए व्यूस्टेट सर्वर से/भेजा जाता है। स्पष्टीकरण के लिए –

+0

धन्यवाद। तो यह वास्तव में एक ViewState समस्या है। व्यूस्टेट/कंट्रोलस्टेट बग हैं :) जब भी संभव हो मैं उन्हें अक्षम करता हूं। – kervin

2

उपयोग नहीं करता है के बाद से आप एक DevExpress उपयोगकर्ता हैं, के बजाय ऐसे हैं, तो आप को जानने के लिए एक छोटे से समय देने के लिए विचार कर सकते हैं उनके CallbackPanel जो आप अतुल्यकालिक करने की अनुमति देगा UpdatePanel के ऊपरी हिस्से के बिना प्रसंस्करण।

वैकल्पिक रूप से (किसी ने मुझे सही करें यदि मैं गलत हूँ) लेकिन अगर Postbacks के सभी (एक UpdatePanel में यानी) अतुल्यकालिक कर रहे हैं, नहीं यह पूरे पृष्ठ के लिए ViewState निष्क्रिय करने के लिए सैद्धांतिक रूप से संभव हो सकता है (में पृष्ठ निर्देश) नकारात्मक परिणामों के बिना? आपको इसे बिल्कुल पूरी तरह से परीक्षण करना होगा, लेकिन यह एक शॉट के लायक है।

+0

मैं इसे आज़मा दूंगा, अब तक का सबसे अच्छा सुझाव .. –

0

सभी के लिए इच्छुक मैं क्लाइंटसाइड पर व्यूस्टेट डेटा से छुटकारा पाने के तरीके पर एक समाधान जोड़ना चाहता हूं। यह सर्वर को एक अतिरिक्त भार देता है लेकिन यदि आप मेरे जैसी स्थिति में हैं और बहुत सारी सर्वर शक्ति है और क्लाइंटसाइड का भार लेने की आवश्यकता है तो यह अच्छा है।

चलो सब अपने पृष्ठों BasePage.cs से निकाले जाते हैं इस

public class BasePage : System.Web.UI.Page 
{ 
    protected override void SavePageStateToPersistenceMedium(object viewState) 
    { 
     string vsKey = String.Format("VIEWSTATE_{0}_{1}_{2}", base.Session.SessionID, Request.RawUrl, DateTime.Now); 
     Session.Add(vsKey, viewState); 
     ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", vsKey); 
    } 

    protected override object LoadPageStateFromPersistenceMedium() 
    { 
     string vsKey = Request.Form["__VIEWSTATE_KEY"]; 
     return Session[vsKey]; 
    } 
} 

की तरह लग रही अब आप अपने कोड में viewstate के बजाय viewstate डेटा सत्र के लिए एक महत्वपूर्ण है ...

वर्क्स एक तरह 1000-1200 दैनिक आगंतुकों के साथ एक वेबसाइट पर मेरे लिए आकर्षण भी।

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