Ответ 1
Я боюсь, но 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 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);
}
/* ... */
}