2012-09-14 40 views
10

我正在一個相對較大的ExtJS MVC應用程序與大約> 40個控制器,> 100商店,> 100個模型等。我沒有嚴格遵循可能的MVC方式,所以我實現了一個懶控制器初始化,它在需要的時候首先初始化控制器,所以商店也是如此。我也不會在任何控制器中註冊任何視圖,但這僅僅是因爲我不需要。如何配置文件(調試)ExtJS事件管道/事件

現在,窗體(在Ext.window.Window中打開)需要大約1-2秒,直到它們顯示出來,而相當小的項目中的相同窗體立即彈出。 所以表格(佈局)不能成爲這裏帶給我的事情的問題。但我不知道怎麼會是最好的方法,或者是否已經有一個很好的教程如何做到這一點。我想這將是很好的剖析這個,看看整個管道需要多長時間(不僅是EventPipe本身)。

事件結構:

大部分的事件都會由負責控制器的control()註冊。所有其他活動至多註冊{ single: true }。當重新使用時,窗戶關閉並重新實例化。

+1

順便說一句,你清理你的控制器是否正確?如果你銷燬了一個控制器,那麼EventBus上的監聽器就不會被框架清理乾淨。對不起,不是你的問題的答案,而是相關的。 – mistaecko

+0

@mistaecko謝謝你的額外信息!這真的很好知道!但是,目前我沒有回收控制器,一旦它們被初始化,所以這應該不起作用。就我所看到的源代碼而言,控制器被存儲在ApplicationController的內部集合中。但我想這不是簡單的事件調度分析 – sra

+1

如果你決定清理你的控制器,然後檢查我的答案如何銷燬控制器在這裏:http://stackoverflow.com/questions/12330846/how- to-delete-controller-extjs/12344788#12344788 – mistaecko

回答

6

恐怕,但ExtJS不提供任何事件分析。它使用自定義事件系統。

以下是我如何看到此問題的解決方案。

Ext.util.Event類提供調度和處理框架中使用的任何事件的功能,並提供單點來分派所有框架事件(fireEvent僅僅是Ext.app.EventBus.dispatch方法的封裝)。

類是私人的,所以我建議看看它的源代碼。

可以覆蓋這些課程,看看它調用Ext.app.EventBus.dispatch方法,並呼籲像Ext.util.Event.fire方法水木清華(內事件偵聽器多少需要EventProfiler應該是你的自己的類)

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

這就是我想到的。但我沒有仔細查看源代碼,只是快速瀏覽一下EventBus。我將在星期一進行測試。無論如何,好的答案+1 – sra

+0

我對你的發現非常感興趣。也許你可以在SO或者Sencha論壇上發佈你的結果! – mistaecko

+0

我做了第一個快速測試原型的負責任的功能,它看起來不錯。我沒有時間繼續研究探查器,但我會盡快找到這個主題。是@mistaecko我會在這裏發佈結果。 – sra