19.09.2008, 18:39
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от ZoNT
|
Ха-ха-ха
|
ZoNT, бессмысленный неадекват начинается =) почитай об оптимизации JS. Закончим на этом (ты конструктивные советы не умеешь воспринимать ).
|
|
19.09.2008, 18:47
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Можно немного сократить условие :-)
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», и думаю не будет поддерживать, поэтому вроде должно корректно работать везде.
|
|
19.09.2008, 18:56
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Сообщение от Dmitry A. Soshnikov
|
ZoNT, бессмысленный неадекват начинается =) почитай об оптимизации JS. Закончим на этом (ты конструктивные советы не умеешь воспринимать ).
|
Фигасе, бессмысленный неадекват. Я тебе описал реальную ситуацию, которая работает на данный момент у нас в фирме...
|
|
19.09.2008, 19:29
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от ZoNT
|
Фигасе, бессмысленный неадекват
|
да ладно, не парься =) этим я хотел сказать, что ты рассуждаешь о 93 гигах трафа, когда в код добавится пару строк; и то - после обфускации разница будет вообще микроскопической.
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);
};
}
})();
Последний раз редактировалось Dmitry A. Soshnikov, 19.09.2008 в 19:32.
|
|
19.09.2008, 21:00
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
ну и сравни по размеру:
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 гигов/сутки.
|
|
19.09.2008, 21:25
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
ZoNT, мелочи это все =) Ну как знаешь, повторю - я привел вариант оптимизации, принять или нет - это уже твое дело.
А по скорости тесты провел?
|
|
19.09.2008, 21:32
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Я тебе про оптимизацию по размеру, он мне про баню...
Выигрывая 10мс на стороне клиента мы попадаем на 107 гигов ежедневного трафика.
Ты линукс уважаешь? А ты знаешь что сейчас ядро линукса собирается с оптимизацией по размеру, а не по скорости?
|
|
19.09.2008, 21:56
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от ZoNT
|
Я тебе про оптимизацию по размеру, он мне про баню...
|
Про оптимизацию по размеру это ты парировал уже позже (чтобы как-то оправдать лишние if'ы-else'ы), я изначально говорил об оптимизации по скорости.
По твоим рассказам, твой код должен тогда выглядеть примерно так (если на счету уже байты):
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 }
Сообщение от ZoNT
|
Ты линукс уважаешь?
|
ага
Сообщение от ZoNT
|
А ты знаешь что сейчас ядро линукса собирается с оптимизацией по размеру, а не по скорости?
|
неа (но если это факт - буду знать)
Последний раз редактировалось Dmitry A. Soshnikov, 19.09.2008 в 22:17.
|
|
19.09.2008, 22:14
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
for (var k = 0, l=коллекция.length; k < l; k ++) - итого 3 лишних байта.
Но эта не тот случай, на котором надо экономить. Ты сильно утрируешь:
коллекция будет перебираться намного дольше, чем выполняется навешивание обработчика событий. Плюс я никогда не навешиваю обработку событий в цикле. Если есть куча элементов, которым надо навесить обработчик в цикле, значит можно этот обработчик навесить 1 раз на парент и немного откорректировать код.
|
|
19.09.2008, 22:23
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
У больших проектов (1 000 000 000 хостов) есть проблемы и побольше, чем 107 гигов траффика в сутки. Да и вообще обсуждается сферический сервер в вакууме, ведь при стольких хостах исходящий траффик настолько велик, что лучше задумываться об оптимизации скорости на клиенте, чем о лишних байтах.
|
|
|
|