switch(foo) {
  case 'alpha':
    // do X 
    break;
  case 'beta':
    // do Y 
    break;
  default:
    // do Z 
    break;
}

위와 같은 구문을 다음처럼 Object notation을 써서 약간 더 빠르게 실행될 수 있도록 구현할 수 있다.

var switchObj = {
  'alpha'function() {
    // do X 
  },
  'beta'function() {
    // do Y 
  },
  '_default'function() {
    // do Z 
  }
};
(switchObj.hasOwnProperty(foo) && switchObj[foo] || switchObj._default)(args);

물론 비교 대상의 case가 별로 많지 않을 땐 속도의 차이는 크게 나지 않는다.

따온 곳 – How DRY Affects JavaScript Performance — Faster JavaScript Execution For The Lazy Developer

관련된 주제의 글

“JavaScript의 Switch Statement를 약간 더 빠르게”에 달린 3개의 댓글

이런건 언어 구현의 디테일이기 때문에 옳은 트릭이 아닙니다. 언어 구현이 바뀌면 언제든 상황은 바뀔 수 있습니다. 미세최적화를 피하고 언제나 가독성을 우선하는게 좋습니다. 성능은 프로파일링해서 병목을 찾아서 고치는 편이 훨씬 더 효과적인 개선이 가능합니다.

링크하신 슬라이드 내용 자체는 자바스크립트 전반적으로 어떻게 하면 빠른 코드를 만드는지 안내해주는 내용이네요. 좋은 슬라이드인 것 같습니다. 물론 홍민희씨 말처럼 80%의 성능저하를 일으키는 20%의 코드를 집중해서 잡는 것이 전반적으로 옳죠. switch문의 경우에는 자바스크립트 엔진에 따라서 이견이 많긴 하지만 다른 부분은 대체적으로 괜찮은 것 같습니다.

별로 드러나지도 않을 미세한 속도의 개선 때문에 코드의 가독성을 포기하는 것이 어리석은 짓이란 점은 저도 전적으로 동감합니다.
개인적으로 switch statement를 다르게 구현해놓은 코드가 흥미로워서 가져왔네요.

그런데 위의 예에서 브라우저의 JavaScript 해석 엔진에 있는 어떤 구현 디테일이 개선되어서 전세가 역전되는 일은 없겠죠? 😈

오해의 소지를 염려해 주시고 좋은 충고의 글을 달아주셔서 고맙습니다. 🙂

댓글을 남겨 주세요