Javascript 스위치 vs. if... 그렇지 않으면...
여러분, 몇 가지 질문이 있습니다.
- 가 있습니까?
switch
과 진술if...else
? - 만약 그렇다면 왜?
- 의 입니다.
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에서 성능이 다릅니다.
일반적인 답변:
- 네, 보통.
- 여기서 더 많은 정보 보기
- 예, 각각 다른 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개 입력하지 않는 한 정말 중요합니까?
- 만약 차이가 있다면, 그것은 결코 눈에 띄지 않을 만큼 크지 않을 것입니다.
- 없음
- 아니요, 모두 동일하게 작동합니다.
기본적으로 코드를 가장 읽기 쉽게 만드는 것을 사용합니다.확실히 하나 또는 다른 구조물이 더 깨끗하고, 더 읽기 쉽고, 더 유지보수가 가능한 곳이 있습니다.이것은 자바스크립트 코드에서 몇 나노초를 절약하는 것보다 훨씬 더 중요합니다.
스위치 문과 if...else...else 사이에 Javascript의 성능 차이가 있습니까?
하지 않아요, 난그게안해생각.switch
사용을 .if-else
조건들.
스위치와 if...의 동작이 브라우저마다 다릅니까? (FireFox, IE, Chrome, Opera, Safari)
동작은 모든 브라우저에서 동일합니다 :)
일반적으로 스위치보다 if-else가 더 빠르다는 것이 밝혀졌습니다.
http://jsperf.com/switch-if-else/46
- 워크벤치는 경우에 따라 매우 작은 차이를 초래할 수 있지만 처리 방법은 어쨌든 브라우저에 따라 다르므로 신경쓸 필요가 없습니다.
- 처리 방법이 다르기 때문에
- 어쨌든 행동이 다르다면 브라우저라고 할 수 없습니다.
언급URL : https://stackoverflow.com/questions/2922948/javascript-switch-vs-if-else-if-else
'programing' 카테고리의 다른 글
런타임 경고: 분할에서 잘못된 값이 발견되었습니다. (0) | 2023.07.23 |
---|---|
java에서 oracle sql 스크립트 실행 (0) | 2023.07.23 |
MySQL 테이블에서 누락된 ID 가져오기 (0) | 2023.07.23 |
SQL 동일한 필드에서 여러 값 검색 (0) | 2023.07.23 |
스크킷 학습으로 다중 클래스 사례의 정밀도, 리콜, 정확도 및 f1 점수를 계산하는 방법은 무엇입니까? (0) | 2023.07.23 |