programing

Javascript 스위치 vs. if... 그렇지 않으면...

oldcodes 2023. 7. 23. 14:40
반응형

Javascript 스위치 vs. if... 그렇지 않으면...

여러분, 몇 가지 질문이 있습니다.

  1. 가 있습니까?switch과 진술if...else?
  2. 만약 그렇다면 왜?
  3. 의 입니다.switch그리고.if...else브우저마 다까릅니다 ? (파이어폭스, IE, 크롬, 오페라, 사파리)

이 질문을 하는 이유는 제가 더 나은 성과를 얻는 것 같습니다.switch파이어폭스에서 약 1000건의 사례가 있는 진술.


편집됨 유감스럽게도 이 자바스크립트는 컴파일된 라이브러리에서 서버 측에서 생성되고 있으며 코드에 액세스할 수 없습니다.자바스크립트를 생성하는 방법은 다음과 같습니다.

CreateConditionals(string name, string arrayofvalues, string arrayofActions)

모메arrayofvalues쉼표로 구분된 목록입니다.

그것이 생산하는 것은

function [name] (value) {
  if (value == [value from array index x]) {
     [action from array index x]
  }
}

여기서 참고: 위치[name]에 입니다.

구문 를 작성한 , "TextArea"의 했습니다.case진술들.

마지막으로 기능을 실행하면 정상적으로 실행되지만 IE와 Firefox에서 성능이 다릅니다.

일반적인 답변:

  1. 네, 보통.
  2. 여기서 더 많은 정보 보기
  3. 예, 각각 다른 JS 처리 엔진을 가지고 있기 때문에 아래 사이트에서 테스트를 실행할 때 스위치는 항상 if, if를 능가했습니다.

시험장

때로는 둘 다 사용하지 않는 것이 좋습니다.예를 들어, "발송" 상황에서 Javascript를 사용하면 완전히 다른 방식으로 작업을 수행할 수 있습니다.

function dispatch(funCode) {
  var map = {
    'explode': function() {
      prepExplosive();
      if (flammable()) issueWarning();
      doExplode();
    },

    'hibernate': function() {
      if (status() == 'sleeping') return;
      // ... I can't keep making this stuff up
    },
    // ...
  };

  var thisFun = map[funCode];
  if (thisFun) thisFun();
}

객체를 생성하여 다방향 분기를 설정하는 것은 많은 이점이 있습니다.기능을 동적으로 추가 및 제거할 수 있습니다.데이터에서 디스패치 테이블을 생성할 수 있습니다.프로그래밍 방식으로 검사할 수 있습니다.다른 함수를 사용하여 처리기를 작성할 수 있습니다.

"케이스"에 해당하는 기능 호출의 오버헤드가 추가되지만, 특정 키에 대한 기능을 찾기 위한 해시 검색의 이점(케이스가 많을 때)이 있습니다.

의이성차의 .switch그리고.if...else if...else크기는 작고, 기본적으로 같은 일을 합니다.차이를 만들 수 있는 한 가지 차이점은 검정할 표현식이 한 번에 한 번만 평가된다는 것입니다.switch각각에 대해 평가되는 동안.if표현식을 평가하는 데 비용이 많이 든다면, 물론 백 번 하는 것보다 한 번 하는 것이 더 빠릅니다.

이러한 명령(및 일반적으로 모든 스크립트)의 구현 차이는 브라우저마다 상당히 다릅니다.브라우저마다 동일한 코드에 대한 성능 차이가 큰 경우가 많습니다.

모든 브라우저에서 모든 코드를 성능 테스트할 수는 없으므로 작업에 가장 적합한 코드를 선택하고 작업 방식을 최적화하기보다는 작업량을 줄여야 합니다.

Pointy의 대답은 객체 리터럴을 대신하여 사용하는 것을 제안합니다.switch또는if/else나도 이 접근법을 좋아하지만, 답의 코드는 새로운 것을 만듭니다.map object를 합니다.dispatch함수의 호출:

function dispatch(funCode) {
  var map = {
    'explode': function() {
      prepExplosive();
      if (flammable()) issueWarning();
      doExplode();
    },

    'hibernate': function() {
      if (status() == 'sleeping') return;
      // ... I can't keep making this stuff up
    },
    // ...
  };

  var thisFun = map[funCode];
  if (thisFun) thisFun();
}

한다면map에는 항목이 많이 포함되어 있으므로 상당한 오버헤드가 발생할 수 있습니다.작업 맵을 한 번만 설정하고 다음과 같이 이미 작성된 맵을 매번 사용하는 것이 좋습니다.

var actions = {
    'explode': function() {
        prepExplosive();
        if( flammable() ) issueWarning();
        doExplode();
    },

    'hibernate': function() {
        if( status() == 'sleeping' ) return;
        // ... I can't keep making this stuff up
    },
    // ...
};

function dispatch( name ) {
    var action = actions[name];
    if( action ) action();
}

구문 외에, 스위치는 다음을 만드는 트리를 사용하여 구현될 수 있습니다.O(log n)if/session을 사용하여 구현해야 하는 반면,O(n)절차적 접근절차적으로 둘 다 처리되는 경우가 더 많고 유일한 차이점은 구문입니다. 게다가 if/else의 사례를 정적으로 10,000개 입력하지 않는 한 정말 중요합니까?

  1. 만약 차이가 있다면, 그것은 결코 눈에 띄지 않을 만큼 크지 않을 것입니다.
  2. 없음
  3. 아니요, 모두 동일하게 작동합니다.

기본적으로 코드를 가장 읽기 쉽게 만드는 것을 사용합니다.확실히 하나 또는 다른 구조물이 더 깨끗하고, 더 읽기 쉽고, 더 유지보수가 가능한 곳이 있습니다.이것은 자바스크립트 코드에서 몇 나노초를 절약하는 것보다 훨씬 더 중요합니다.

스위치 문과 if...else...else 사이에 Javascript의 성능 차이가 있습니까?

하지 않아요, 난그게안해생각.switch 사용을 .if-else조건들.

스위치와 if...의 동작이 브라우저마다 다릅니까? (FireFox, IE, Chrome, Opera, Safari)

동작은 모든 브라우저에서 동일합니다 :)

일반적으로 스위치보다 if-else가 더 빠르다는 것이 밝혀졌습니다.

http://jsperf.com/switch-if-else/46

  1. 워크벤치는 경우에 따라 매우 작은 차이를 초래할 수 있지만 처리 방법은 어쨌든 브라우저에 따라 다르므로 신경쓸 필요가 없습니다.
  2. 처리 방법이 다르기 때문에
  3. 어쨌든 행동이 다르다면 브라우저라고 할 수 없습니다.

언급URL : https://stackoverflow.com/questions/2922948/javascript-switch-vs-if-else-if-else

반응형