2012-09-14 12 views
10

Sto lavorando su un'applicazione MVC ExtJS relativamente grande con circa> 40 controller,> 100 negozi,> 100 modelli e così via. Non seguo il possibile modo MVC strict, quindi ho implementato un'inizializzazione del controller pigro che inizializza il controller prima quando è necessario e quindi nei negozi. Inoltre, non registro nessuna vista all'interno di alcun controller, ma semplicemente perché non ne ho bisogno.Come profilo (debug) ExtJS EventPipe/Events

Ora che i moduli (aperti in una finestra di Ext.window) impiegano circa 1-2 secondi finché non vengono visualizzati, mentre la stessa forma all'interno di un progetto piuttosto piccolo viene visualizzata immediatamente. Quindi il modulo (layout) non può essere il problema qui cosa mi ha portato agli eventi. Ma non so davvero come sarebbe il modo migliore o c'è già un buon tutorial su come farlo. Immagino sarebbe bello profilare questo, per vedere quanto dura l'intero pipe (non solo lo stesso EventPipe).

struttura evento:

maggior parte degli eventi ottenere registrato tramite control() del controllore responsabile. Tutti gli altri eventi sono registrati al massimo con { single: true }. Le finestre si chiudono e si rinnovano quando vengono riutilizzate.

+1

A proposito, pulisci correttamente i controller? Se distruggi un controller, gli ascoltatori su EventBus non vengono ripuliti dal framework. Spiacente, non una risposta alla tua domanda, ma correlata. – mistaecko

+0

@mistaecko Grazie per le informazioni aggiuntive! Questo è davvero buono a sapersi! Ma al momento non ricicli i controller una volta inizializzati, quindi questo non dovrebbe avere alcun effetto. Per quanto ne sappia, dal mio sguardo al codice sorgente i controller vengono memorizzati all'interno di una raccolta interna di ApplicationController. Ma immagino che non sia fatto con la semplice profilazione degli invii di eventi – sra

+1

Se decidessi di ripulire i controller, controlla la mia risposta su come distruggere i controller qui: http://stackoverflow.com/questions/12330846/how- to-delete-controller-extjs/12344788 # 12344788 – mistaecko

risposta

6

Ho paura ma ExtJS non fornisce alcun profilo degli eventi. Usa un sistema di eventi personalizzato.

Ecco come vedo la soluzione di questo problema.

ci sono Ext.util.Event classe che fornisce funzionalità per il dispacciamento e la gestione ogni caso utilizzata nel quadro e Ext.app.EventBus che forniscono un unico punto di inviare tutti gli eventi quadro (fireEvent è solo wrapper per il metodo Ext.app.EventBus.dispatch).

Le classi sono private quindi consiglio di vedere il suo codice sorgente.

È possibile ignorare queste classi per vedere quanto ci vuole da una chiamata al metodo Ext.app.EventBus.dispatch e chiamando listener di eventi all'interno del metodo Ext.util.Event.fire smth come quella (EventProfiler si suppone essere la vostra propria classe)

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

Era quello che avevo in mente. Ma non avevo guardato in dettaglio nel codice sorgente, solo una rapida occhiata all'EventBus. Lo metterò alla prova lunedì. Buona risposta comunque +1 – sra

+0

Sono molto interessato alle tue scoperte. Forse potresti pubblicare i tuoi risultati qui su SO o sui forum Sencha! – mistaecko

+0

Ho fatto i primi test rapidi per la prototipazione delle funzioni responsabili e sembra buono fino ad ora. Non ho ancora tempo per continuare a lavorare su un profiler, ma tornerò su questo argomento non appena avrò trovato un po 'di tempo. E sì @mistaecko posterò il risultato qui. – sra