2012-09-14 10 views
10

मैं चारों ओर> 40 नियंत्रकों,> 100 स्टोर,> 100 मॉडल और इतने पर के साथ एक अपेक्षाकृत बड़े ExtJS MVC आवेदन पर काम कर रहा हूँ। मैं संभावित एमवीसी मार्ग का सख्ती से पालन नहीं करता इसलिए मैंने एक आलसी नियंत्रक प्रारंभिक कार्यान्वित किया जो नियंत्रक को पहले आवश्यक होने पर शुरू करता है और इसलिए स्टोर। मैं किसी भी नियंत्रक के भीतर किसी भी दृश्य को पंजीकृत नहीं करता हूं, लेकिन इसका कारण यह है कि मुझे इसकी आवश्यकता नहीं है।कैसे प्रोफ़ाइल (डीबग करें) ExtJS EventPipe/घटनाक्रम

अब यह आता है कि रूपों (एक Ext.window.Window भीतर खोला) के चारों ओर 1-2 सेकंड ले, जब तक वे ऊपर से पता चला है, जबकि एक नहीं बल्कि छोटे परियोजना के भीतर एक ही रूप तुरंत दिखाई नहीं देता। तो फ़ॉर्म (लेआउट) यहां समस्या नहीं हो सकती है जो मुझे घटनाओं में लाया। लेकिन मुझे वास्तव में पता नहीं है कि सबसे अच्छा तरीका कैसा होगा या यह पहले से ही एक अच्छा ट्यूटोरियल कैसे किया जाए। मुझे लगता है कि यह प्रोफाइल करना अच्छा होगा, यह देखने के लिए कि पूरी पाइप कितनी देर तक लेती है (न केवल इवेंट पाइप)।

घटना संरचना:

घटनाओं में से अधिकांश जिम्मेदार नियंत्रक के control() के माध्यम से पंजीकृत मिलता है। अन्य सभी घटनाएं { single: true } के साथ सबसे अधिक पंजीकृत हैं। खिड़कियों को बंद कर दिया जाता है और पुन: उपयोग किए जाने पर बहाल किया जाता है।

+1

बीटीडब्ल्यू, क्या आप अपने नियंत्रकों को सही तरीके से साफ करते हैं? यदि आप नियंत्रक को नष्ट करते हैं तो EventBus पर श्रोताओं को ढांचे द्वारा साफ नहीं किया जाता है। क्षमा करें, आपके प्रश्न का उत्तर नहीं, बल्कि संबंधित है। – mistaecko

+0

@mistaecko उस अतिरिक्त जानकारी के लिए धन्यवाद! यह जानना वाकई अच्छा है! लेकिन वर्तमान में जब वे प्रारंभ किए जाते हैं तो मैं नियंत्रकों को रीसायकल नहीं करता हूं इसलिए इसका कोई प्रभाव नहीं लेना चाहिए। जहां तक ​​स्रोत कोड पर मेरे दिखने से पता है नियंत्रक एप्लिकेशन नियंत्रक के आंतरिक संग्रह में संग्रहीत हो जाते हैं। लेकिन मुझे लगता है कि आप कभी भी, अपने नियंत्रकों को साफ करने का फैसला तो कैसे नियंत्रकों यहाँ नष्ट करने के लिए पर मेरा उत्तर की जाँच यदि यह घटना dispatchings – sra

+1

के सरल रूपरेखा के साथ नहीं किया जाता है: http://stackoverflow.com/questions/12330846/how- टू-डिलीट-कंट्रोलर-एक्सटीजेएस/12344788 # 12344788 – mistaecko

उत्तर

6

मुझे डर लग रहा है, लेकिन ExtJS किसी भी घटना की रूपरेखा प्रदान नहीं करता है। यह कस्टम घटना प्रणाली का उपयोग करें।

यहाँ है कि कैसे मैं इस मुद्दे का समाधान देखते हैं।

Ext.util.Event वर्ग कि भेजने और ढांचे और Ext.app.EventBus कि सभी ढांचा घटनाओं प्रेषण करने के लिए एक बिंदु प्रदान में इस्तेमाल किसी भी घटना (fireEvent सिर्फ Ext.app.EventBus.dispatch विधि के लिए आवरण है) से निपटने के लिए सुविधा प्रदान करता है कर रहे हैं।

क्लासेस निजी हैं तो मैं इसके स्रोत कोड को देखने के लिए सलाह देते हैं।

आप इन कक्षाओं ओवरराइड कर सकते हैं देखने के लिए कितना EventProfiler माना जाता है Ext.app.EventBus.dispatch विधि बुला और उस तरह Ext.util.Event.fire विधि ख़ाली (भीतर घटना श्रोता को कॉल करने से लेता है अपने ही वर्ग)

Ext.app.EventBus

dispatch: function (/* event name or Ext.util.Event */event, /* Target class */ target, args) { 
    //start timing 
    var start = new Date(); 

    /* ... */ 

    for (i = 0, ln = events.length; i < ln; i++) { 
     event = events[i]; 
     // Fire the event! 
     if (event.fire.apply(event, Array.prototype.slice.call(args, 1)) === false) { 
      return false; 
     } 
     // start event profiling 
     // here we are sure that event is dispatched and it's instance of Ext.util.Event 
     EventProfiler.startProfile(event, /* time passed from dispath method started */new Date() - start); 
    } 

    /* rest of dispatch method call */ 
} 

Ext.util.Event

fire: function() { 
    /* ... */ 
    if (listener.o) { 
     args.push(listener.o); 
    } 

    EventProfiler.endProfile(this); 

    if (listener && listener.fireFn.apply(listener.scope || me.observable, args) === false) { 
     return (me.firing = false); 
    } 

    /* ... */  

} 
+0

यही वह था जो मुझे दिमाग में था। लेकिन मैंने सोर्सकोड में विस्तृत नहीं देखा था, इवेंटबस पर बस एक त्वरित नज़र। मैं सोमवार को इसका परीक्षण करूंगा। अच्छा जवाब वैसे भी +1 – sra

+0

मुझे आपके निष्कर्षों में बहुत दिलचस्पी है। हो सकता है कि आप यहां अपने परिणाम एसओ या सेन्का मंचों पर पोस्ट कर सकें! – mistaecko

+0

मैंने जिम्मेदार कार्यों को प्रोटोटाइप करने वाले पहले त्वरित परीक्षण किए और यह अब तक अच्छा दिखता है। मेरे पास प्रोफाइलर पर काम करने के लिए अभी तक कोई समय नहीं है लेकिन जैसे ही कुछ समय मिलेगा, मैं इस विषय पर वापस आऊंगा। और हाँ @ मिस्टेको मैं परिणाम यहां पोस्ट करूंगा। – sra

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