クロスブラウザを考慮した処理でのif文の評価回数を減らす

スポンサーリンク

イベント登録なんかの場合を例としてみると、、

[before]

var addEvent = function(element, type, func) {
  if(window.addEventListener) {
    element.addEventListener(type, func, false);
  } else {
    element.attachEvent('on' + type, func);
  }
}

[after]

var addEvent = (window.addEventListener ?
  function(element, type, func) {
    element.addEventListener(type, func, false);
  } :
  function(element, type, func) {
    element.attachEvent('on' + type, func);
  });

関数定義の時点で、判定してしまって、その後は判定されないようにします。
三項演算子を使うことによって、すっきりするような気がします。


あとは、ブラウザの判定処理なんかとかも、一度しか行われないように、変数として持ってしまうとか。

var Util = {
  isIE: (/MSIE/.test(navigator.userAgent) && !window.opera),
  addEvent: (window.addEventListener ?
    function(element, type, func) {
      element.addEventListener(type, func, false);
    } :
    function(element, type, func) {
      element.attachEvent('on' + type, func);
    })
};
if (!Util.isIE) {
  console.log('IEではありません');
}