恐れ入りますが、ExtJSはイベントプロファイリングを提供していません。カスタムイベントシステムを使用しています。
これが私がこの問題の解決策をどのように見ているかです。
フレームワークで使用されるイベントをディスパッチおよび処理する機能を提供するExt.util.Eventクラスと、すべてのフレームワークイベントをディスパッチするための単一ポイントを提供するExt.app.EventBusがあります(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);
}
/* ... */
}