恐怕但 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);
}
/* ... */
}