Сообщение от Илья Кантор
|
Особо серьезных оптимизаций там даже в ущерб читабельности не сделаешь имхо.
|
Ну тогда продолжим
:
1. все конструкции типа:
a = a || b;
полезно заменить на:
a || (a = b);
Это неплохо увеличивает производительность.
Вот так, например, выглядит мой вариант Event.fix :
if (e._fixed) return e;
e._fixed = true;
e.target || (e.target = e.srcElement || $d);
e.relatedTarget || e.fromElement && (e.relatedTarget = e.fromElement == e.target ? e.toElement : e.fromElement);
if (e.pageX == null && e.clientX != null) {
var docElem = $d.documentElement, body = $d.body || {};
e.pageX = e.clientX + (window.pageXOffset || docElem.scrollLeft || body.scrollLeft || 0) - (docElem.clientLeft || 0);
e.pageY = e.clientY + (window.pageYOffset || docElem.scrollTop || body.scrollTop || 0) - (docElem.clientTop || 0);
}
e.which || e.button && (e.which = e.button & 1 ? 1 : e.button & 2 ? 3 : e.button & 4 ? 2 : 0);
e.preventDefault || (e.preventDefault = preventDefault);
e.stopPropagation || (e.stopPropagation = stopPropagation);
return e;
preventDefault и stopPropagation создаются заранее один раз.
2. в commonHandle переменные handler и ret используются один раз. Лучше вычислять их прямо там, где они используются:
function commonHandle(event) {
event = fixEvent(event)
var handlers = this.events[event.type]
for ( var g in handlers ) {
if ( handlers[g].call(this, event) === false ) {
event.preventDefault()
event.stopPropagation()
}
}
}
3. куски
if (!handler.guid) handler.guid = ++guid
и
elem.events[type][handler.guid] = handler
полезно объединить в одну конструкцию:
elem.events[type][handler.guid || (handler.guid = ++guid)] = handler;
Это позволяет избежать лишнего обращения к свойству объекта (.guid) и минус одна операция булевого отрицания (или как она там называется).
4. fixEvent можно сделать публичным. Во-первых, он может понадобиться при обработке в атрибуте элемента, куда код добавляется не через Event.add, во-вторых, может возникнуть необходимость переопределить его (менее вероятно) или обернуть в другую функцию (вот это очень вероятно) для увеличения функциональности.
--------
Не надоел еще?