Если вам нужно обработать все эти события, и вы упорядочиваете операторы if-else по частоте запуска событий (как у вас уже есть), это приводит к незначительному снижению производительности, т. Е. Не более 4 сравнений коротких строк.Следующий код пытается измерить производительность 10 000 000 сравнений строк фиксированного размера:
$(function (){
Function.prototype.benchmark = function(name, times, args){
var iteration;
var start = new Date();
for (iteration=0; iteration<times; iteration++) {
var result = this.apply(this, args);
}
var end = new Date();
alert(name + " : " + (end-start));
}
function test(args){
return args[0] == "thisistest";
}
function overhead(args){
}
test.benchmark("string comparison", 10000000,["thisistesT"]);
//run same without the string comparison
overhead.benchmark("overhead", 10000000,["thisistesT"]);
});
Поскольку браузер - не единственное приложение на моем ПК, результаты могут отличаться в зависимости от исполнения, однако я очень редко получал результатыв Chrome менее 100 мс (помните, что это 10 000 000 итераций).
В любом случае, хотя ваша производительность не пострадает от привязки нескольких событий к одной функции, я действительно сомневаюсь, что это упростит ваш проект.Наличие множества операторов if-else обычно считается плохой практикой и недостатком проекта.
Если вы сделаете это так, чтобы вы могли делить состояние между обработчиками, располагая их в общем объеме функции, вам лучшевыключено что-то вроде:
$(function (){
var elementSelector = "#Element";
var i = 0; //shared
var events = {
mouseover : function(){alert("mouseOver " + elementSelector + i++);},
mouseout : function(){alert("mouseOut " + elementSelector + i++);}
// define the rest of the event handlers...
};
var $target = $(elementSelector);
for(var k in events){
$target.bind(k, events[k]);
}
});