wake-up-neo.com

Welches ist schneller und besser, wenn, wenn?

Welches ist die bessere und schnellste Methode: wenn oder wechseln Sie?

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

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

Ihr erstes Beispiel ist einfach falsch. Sie brauchen elseif statt nur else.

Wenn Sie if..elseif... oder switch verwenden, ist dies in erster Linie eine Vorzugssache. Die Leistung ist die gleiche.

Wenn jedoch alle Ihre Bedingungen vom Typ x == value sind, wobei x in jeder Bedingung gleich ist, ist switch normalerweise sinnvoll. Ich würde auch nur switch verwenden, wenn mehr als z. zwei Bedingungen.

Ein Fall, in dem switch Ihnen tatsächlich einen Leistungsvorteil verschafft, ist, wenn der variable Teil ein Funktionsaufruf ist:

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

Dann wird some_func() nur einmal mit aufgerufen

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

es würde zweimal aufgerufen werden - einschließlich möglicher Nebenwirkungen des zweimaligen Funktionsaufrufs. Sie können jedoch immer $res = some_func(); und dann $res in Ihren if-Bedingungen verwenden - so können Sie dieses Problem gemeinsam vermeiden.

In einem Fall, in dem Sie nicht verwenden können, gibt es komplexere Bedingungen - switch funktioniert nur für x == y, wobei y ein konstanter Wert ist.

119
ThiefMaster

Laut phpbench.com ist if/elseif etwas schneller, insbesondere bei Verwendung eines strengen Vergleichs (===). 

 enter image description here

Aber es ist nur wirklich wichtig, wenn Sie Mikrosekunden für eine Funktion abtasten möchten, die tausendmal aufgerufen wird.

19
Guest

Allgemeine Regel ist verwenden Sie switch, wenn die Anzahl der Bedingungen größer als 3 ist} (zur besseren Lesbarkeit).

ifelse if/else ist flexibler (daher besser), aber switch ist etwas schneller, da sie die Bedingung nur einmal berechnet und dann die Ausgabe prüft, während if dies jedes Mal tun muss.

_/EDIT: Anscheinend ist switch LANGSAMER ALS if Immerhin konnte ich schwören, dass dies nicht der Fall war ...

14
Alix Axel

Es hängt von der Nutzung ab. Wenn Sie den fxp-Status (online, away, dnd, offline ...) haben, sollten Sie ihn besser verwenden.

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

Aber wenn Sie so etwas wollen

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

oder 

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

es ist besser, wenn sonst.

2
sczdavos

Bei Verwendung von == ist die Leistung von if ... elseif im Vergleich zu switch nahezu identisch. Bei Verwendung von === ist if ... elseif jedoch etwa dreimal schneller (gemäß: phpbench ).

Im Allgemeinen sollten Sie sich für das Lesbarste entscheiden und switch verwenden, wenn Sie mehr als 3 Vergleiche durchführen. Wenn die Leistung ein großes Problem darstellt und Sie keine Typkonvertierungen vornehmen müssen, verwenden Sie if ... elseif mit ===.

2
Dan Bray

meiner Meinung nach ist das "if/else" schneller, aber nicht besser als wechseln.

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

wenn Sie 1,2 Fälle wie if/else if/else machen müssen

1
user1299518

Ich glaube, der Compiler wird sie am Ende des Tages in einen sehr ähnlichen oder sogar identischen Code verwandeln. 

Versuchen Sie nicht, die Optimierung für den Compiler durchzuführen, es sei denn, Sie machen etwas Seltsames. 

Außerdem ist die Entwicklerzeit generell wichtiger als die Laufzeit (mit Ausnahme von Spielen). Daher ist es besser, sie lesbarer und wartbarer zu machen. 

0
will