ProgramingTip

어떤 것이 더 빠르고 더 낫입니까?

bestdevel 2020. 11. 16. 21:55
반응형

어떤 것이 더 빠르고 더 낫입니까?


더 가장 빠른 방법은 무엇입니까? 또는 스위치?

if(x==1){
  echo "hi";
} else if (x==2){
  echo "bye";
}

switch(x){
  case 1
    ...
  break;
  default;
} 

첫 번째 예는 잘못되었습니다. elseif대신 필요 합니다 else.

주로 사용 if..elseif...하거나 switch선호하는 문제입니다. 성능은 동일합니다.

모든 조건이 타입 인 경우, x == valuex모든 조건에서 동일하고 switch일반적으로 의미가 있습니다. switch예를 들어 두 가지 이상의 조건이있는 경우 에만 사용 합니다.

switch변수 부분은 함수 호출의 경우 실제로 당신에게 성능 이점을 제공입니다 :

switch(some_func()) {
    case 1: ... break;
    case 2: ... break;
}

그런 다음 some_func()한 번만 호출됩니다.

if(some_func() == 1) {}
elseif(some_func() == 2) {}

두 번 호출되는 함수 호출의 부작용을 포함하여 두 번 호출됩니다. 항상 사용 그러나 $res = some_func();하고 $res자신의 if보기 조건 에서 사용할 수 있으므로이 문제를 모두 피할 수 있습니다.

이 경우 당신 수 없습니다 -이 좀 더 당신 복잡한보기 조건이있을 때 전혀 스위치를 사용입니다 switch만 작동 x == yy상수의 가치.


phpbench.com 에 따르면 if / elseif는 엄격한 엄격한 비교 (===)를 사용할 때 약간 더 빠 사용합니다.

여기에 이미지 설명 입력

그러나 수천 번 호출되는 함수에서 마이크로 초를 줄이려는 경우에만 정말 중요합니다.


일반적인 규칙은 조건 수가 3보다 클 때마다 사용 switch하는 것입니다 (가독성을 위해).

if/ else if/ else더 유연하지만 (더 좋습니다), switch조건을 한 번만 계산 한 다음 출력을 확인하기 때문에 더 빠르며 if매번이 작업을 수행해야합니다.

편집 : 결국보다 switch느린if, 나는 사실이 아니라고 맹세 할 수 있습니다 ...


를 사용하면 대상의 ==성능 이 거의 동일합니다. 사용시 그러나 , (:에있어서 3 배 빠른 phpbench ).if ... elseifswitch===if ... elseif

일반적으로 가장 쉬운 것을 사용 switch하고 3 개 이상의 비교를 할 때 사용 합니다. 만약 성능이 주요 관심사이고 당신은 사용 후, 모든 종류의 변환을 할 필요가 없습니다 if ... elseif와 함께 ===.


사용법에 따라. fxp 상태 (온라인, 자리 비움, dnd, 오프라인 ...)가있는 경우 스위치를 더 잘 사용하십시오.

switch(status)
{
case 'online':
...
}

하지만 이런 걸보고

if ((last_reply.ContainsKey(name)) && (last_reply[name] < little_ago))

또는

if (msg.ToString()[0] == '!')

더 잘 사용됩니다.


내 의견으로는 "if / else"가 더 빠르지 만 스위치보다 낫지는 않지만 선호합니다.

echo ($x==1?"hi":($x==2?"bye":""));

if / else if / else와 같은 1,2 케이스를해야하는 경우


나는 컴파일러가 있다는 것을 매우 유사하거나 하루가 코드를 작성하고 믿습니다.

이상한 일이 아니라면 컴파일러 최적화를 시도하지 않습니다.

또한 개발자 시간은 일반적으로 실행보다 더 중요시에 (게임 제외) 더 읽기 수준 유지 관리하기 쉽도록 만드는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/10773047/which-is-faster-and-better-switch-case-or-if-else-if

반응형