Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.09.2008, 18:39
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от ZoNT
Ха-ха-ха
ZoNT, бессмысленный неадекват начинается =) почитай об оптимизации JS. Закончим на этом (ты конструктивные советы не умеешь воспринимать ).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #12 (permalink)  
Старый 19.09.2008, 18:47
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 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», и думаю не будет поддерживать, поэтому вроде должно корректно работать везде.
Ответить с цитированием
  #13 (permalink)  
Старый 19.09.2008, 18:56
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Сообщение от Dmitry A. Soshnikov Посмотреть сообщение
ZoNT, бессмысленный неадекват начинается =) почитай об оптимизации JS. Закончим на этом (ты конструктивные советы не умеешь воспринимать ).
Фигасе, бессмысленный неадекват. Я тебе описал реальную ситуацию, которая работает на данный момент у нас в фирме...
Ответить с цитированием
  #14 (permalink)  
Старый 19.09.2008, 19:29
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 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);
    };
  }
})();
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 19.09.2008 в 19:32.
Ответить с цитированием
  #15 (permalink)  
Старый 19.09.2008, 21:00
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 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 гигов/сутки.
Ответить с цитированием
  #16 (permalink)  
Старый 19.09.2008, 21:25
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

ZoNT, мелочи это все =) Ну как знаешь, повторю - я привел вариант оптимизации, принять или нет - это уже твое дело.

А по скорости тесты провел?
__________________
Тонкости ECMAScript
Ответить с цитированием
  #17 (permalink)  
Старый 19.09.2008, 21:32
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Я тебе про оптимизацию по размеру, он мне про баню...
Выигрывая 10мс на стороне клиента мы попадаем на 107 гигов ежедневного трафика.

Ты линукс уважаешь? А ты знаешь что сейчас ядро линукса собирается с оптимизацией по размеру, а не по скорости?
Ответить с цитированием
  #18 (permalink)  
Старый 19.09.2008, 21:56
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 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
А ты знаешь что сейчас ядро линукса собирается с оптимизацией по размеру, а не по скорости?
неа (но если это факт - буду знать)
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 19.09.2008 в 22:17.
Ответить с цитированием
  #19 (permalink)  
Старый 19.09.2008, 22:14
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

for (var k = 0, l=коллекция.length; k < l; k ++) - итого 3 лишних байта.

Но эта не тот случай, на котором надо экономить. Ты сильно утрируешь:
коллекция будет перебираться намного дольше, чем выполняется навешивание обработчика событий. Плюс я никогда не навешиваю обработку событий в цикле. Если есть куча элементов, которым надо навесить обработчик в цикле, значит можно этот обработчик навесить 1 раз на парент и немного откорректировать код.
Ответить с цитированием
  #20 (permalink)  
Старый 19.09.2008, 22:23
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

У больших проектов (1 000 000 000 хостов) есть проблемы и побольше, чем 107 гигов траффика в сутки. Да и вообще обсуждается сферический сервер в вакууме, ведь при стольких хостах исходящий траффик настолько велик, что лучше задумываться об оптимизации скорости на клиенте, чем о лишних байтах.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в IE динамически установить значение события onClick? Гость Элементы интерфейса 6 16.01.2011 23:46
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
Обработка события Deep Events/DOM/Window 12 29.07.2009 22:58
отправка файла через обработчик события submit starrich AJAX и COMET 2 13.08.2008 22:29
Dom и события кнопок Гость Events/DOM/Window 4 07.08.2008 18:53