Цитата:
|
Можно немного сократить условие :-)
function addEvent(e,t,f){ if (e.addEventListener) e.addEventListener(t, f, false); //@cc_on e.attachEvent('on'+t, f); } function removeEvent(e,t,f){ if (e.removeEventListener) e.removeEventListener(t, f, false); //@cc_on e.detachEvent('on'+t, f); } IE8b2 так и не поддерживает «addEventListener», и думаю не будет поддерживать, поэтому вроде должно корректно работать везде. |
Цитата:
|
Цитата:
Octane, да, можно и условный комментарий. На всякий случай, приведу вариант, о котором говорил выше (необфусцированный, естественно): var registerEvent = (function() { if (document.addEventListener) { return function(element, eventName, handler, useCapture) { return element.addEventListener(eventName, handler, useCapture); }; } else if (document.attachEvent) { return function(element, eventName, handler) { return element.attachEvent('on' + eventName, handler); }; } })(); var unRegisterEvent = (function() { if (document.removeEventListener) { return function(element, eventName, handler, useCapture) { return element.removeEventListener(eventName, handler, useCapture); }; } else if (document.detachEvent) { return function(element, eventName, handler) { return element.detachEvent('on' + eventName, handler); }; } })(); |
ну и сравни по размеру:
function addEvent(e,t,f){if(e.addEventListener)e.addEventListener(t,f,false);else e.attachEvent('on'+t,f)} function removeEvent(e,t,f){if(e.removeEventListener)e.removeEventListener(t,f,false);else e.detachEvent('on'+t,f)} и var addEvent=(function(){if(document.addEventListener)return function(e,n,h,u){e.addEventListener(n,h,u)};else return function(e,n,h){e.attachEvent('on'+n,h)}})(); var removeEvent=(function(){if(document.removeEventListener)return function(e,n,h,u){e.removeEventListener(n,h,u)};else return function(e,n,h){e.detachEvent('on'+n, h)}})(); 338(твой) 223(мой) Итого: 115 байт (более 100 байт). (115 * 1 000 000 000)/1073741824 = 107 гигов/сутки. |
ZoNT, мелочи это все =) Ну как знаешь, повторю - я привел вариант оптимизации, принять или нет - это уже твое дело.
А по скорости тесты провел? |
Я тебе про оптимизацию по размеру, он мне про баню...
Выигрывая 10мс на стороне клиента мы попадаем на 107 гигов ежедневного трафика. Ты линукс уважаешь? А ты знаешь что сейчас ядро линукса собирается с оптимизацией по размеру, а не по скорости? |
Цитата:
По твоим рассказам, твой код должен тогда выглядеть примерно так (если на счету уже байты): var d = document, b = 'EventListener', c = 'add', e = 'remove', f = 'attach', g = 'detach'; if(d[c+b])q[c+b](...); // и т.д. // что ж ты так не пишешь, а? Если у вас так все сложно с трафом =) Еще пример - глубокое DOM-дерево. Берем коллекцию (в самой глубине) из n-ого кол-ва элементов, проходимся циклом (ты, как я понимаю, будешь использовать второй вариант, да? (ну конечно, целых 9 байт текста тратится на объявление переменной length ;))): // быстрый for (var k = 0, length = коллекция.length; k < length; k++) { // code } // медленный (каждый раз вычисляется значение // свойства length, перед этим из DOM-дерева получается // сама колекция - это тоже время) for (var k = 0; k < коллекция.length; k++) { // code } Цитата:
Цитата:
|
for (var k = 0, l=коллекция.length; k < l; k ++) - итого 3 лишних байта.
Но эта не тот случай, на котором надо экономить. Ты сильно утрируешь: коллекция будет перебираться намного дольше, чем выполняется навешивание обработчика событий. Плюс я никогда не навешиваю обработку событий в цикле. Если есть куча элементов, которым надо навесить обработчик в цикле, значит можно этот обработчик навесить 1 раз на парент и немного откорректировать код. |
У больших проектов (1 000 000 000 хостов) есть проблемы и побольше, чем 107 гигов траффика в сутки. Да и вообще обсуждается сферический сервер в вакууме, ведь при стольких хостах исходящий траффик настолько велик, что лучше задумываться об оптимизации скорости на клиенте, чем о лишних байтах.
|
Часовой пояс GMT +3, время: 03:20. |