Влияет ли это утверждение javascript на производительность? - PullRequest
1 голос
/ 10 марта 2010

Я пишу функцию add_event, как показано ниже:

function add_event(o, event_type, callback, capture){
    o = typeof o === "string" ? document.getElementById(o) : o;
    if(document.addEventListener){
        add_event = function(o, event_type, callback, capture){
            o = typeof o === "string" ? document.getElementById(o) : o;
            o.addEventListener(event_type, callback, capture);
        }
    }else if(document.attachEvent){
        add_event = function(o, event_type, callback, capture){
            o = typeof o === "string" ? document.getElementById(o) : o;
            o.attachEvent("on" + event_type, callback);
        }
    }
    add_event(o, event_type, callback, capture);
}

Теперь у меня вопрос: влияет ли утверждение

o = typeof o === "string" ? document.getElementById(o) : o;

на производительность этой программы?Если вы передаете элемент HTML вместо идентификатора, вы фактически выполняете оператор o = o , поэтому я и задаю этот вопрос.Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 10 марта 2010

Скорее всего, интерпретатор js оптимизирует его. Даже если это не так, эффект не будет заметным. И если вы действительно обеспокоены, измените его на:

if(typeof o === "string")
  o = document.getElementById(o);
2 голосов
/ 10 марта 2010

Нет. На большинство интерпретаторов javascript это не повлияет. На тех, кто это сделает, будет воздействовать максимум несколько микросекунд.

В подобных случаях вы должны сосредоточиться на том, чтобы сделать ваш код читабельным и обслуживаемым. Попытка выжать производительность из очень простых операций только приведет к потере времени и, возможно, усложнит поддержку вашего кода.

Если вы чувствуете, что ваш код javascript работает плохо, существует множество инструментов и стратегий, которые вы можете использовать для поиска и устранения проблемы. Следующий вопрос переполнения стека имеет больше по теме: Каков наилучший способ профилировать выполнение JavaScript?

Удачи!

...