Wie Schleifen ändern auch bedingte Anweisungen den laufenden Ablauf
Es gibt zwei Arten von bedingten Anweisungen in JavaScript
if-else
Schalter
if-else ist unser am häufigsten verwendeter Schalter
Aber if - Die else-Anweisung und die switch-Anweisung können in vielen Fällen durcheinander ersetzt werden
Zum Beispiel ist der folgende Code gleichwertig
if(foo){ ...}else{ ...}
switch(foo){ case true: ... default: ...}
Wenn es wenige Bedingungen gibt, sind Menschen wahrscheinlicher if-else verwenden
Aber die Bedingung Mehrere Schalter scheint einfacher zu verstehen
if(foo === 1){ ...}else if(foo === 2){ ...}else if(foo === 3){ ...}else if(foo === 4){ ...}else{ ...}
switch(foo){ case 1: ... case 2: ... case 3: ... case 4: ... default: ...}
Aber welche der beiden Bedingungsanweisungen, die wir verwenden, hat eine bessere Leistung
Wenn die Anzahl der Bedingungen beträgt Wenn die Switch-Anweisung sehr groß ist, wird sie schneller und offensichtlicher ausgeführt.
Genauer gesagt: Wenn die Bedingungen zunehmen, steigt die Leistungsbelastung für if-else stärker
(die meisten Sprach-Switch-Anweisungen verwenden Verzweigungstabellen-Verzweigungstabellenindizes). optimieren)
Und in JavaScript erfolgt keine erzwungene Typkonvertierung in der Switch-Anweisung
Das heißt, der Kongruenzoperator wird zum Vergleich verwendet
Auf diese Weise kommt es zu keinem Verlust der Typkonvertierung
Also verwenden wir if-, wenn die Anzahl der Bedingungen gering ist, sonst, wenn es viele Bedingungen gibt, ist es aus Leistungssicht sinnvoll, den Schalter
zu verwenden
(if-else eignet sich zur Beurteilung zweier diskreter Werte oder mehrere verschiedene Wertebereiche, Schalter eignet sich zur Beurteilung mehrerer diskreter Werte)
Wenn wir if-else-Anweisungen verwenden, sollten wir sie in der Reihenfolge von großen zu kleinen Wahrscheinlichkeiten anordnen
Das ist einfach zu verstehen, wird aber von uns leicht ignoriert.
Ein weiterer Optimierungspunkt besteht darin, zu versuchen, if-else in eine Reihe verschachtelter if-else-Anweisungen zu organisieren.
Dies ähnelt unserer mathematischen Dichotomie, die reduziert werden kann der Umfang und die Ausführungszeit
So
if(foo >= 1 && foo < 3){ //...}else if(foo >= 3 && foo < 5){ //...}else if(foo >= 5 && foo < 7){ //...}else{ //...}
Ändern Sie dazu
if(foo >= 1 && foo < 5){ if(foo < 3){ //... }else{ //... } }else{ if(foo < 7){ //... }else{ //... } }
Kann die Effizienz verbessern
In einigen Fällen In besonderen Fällen bietet die Verwendung der Methode „Nachschlagetabelle“ eine sehr hohe Leistung, wenn eine große Anzahl von Bedingungen vorliegt. Weiter
function fn(a){ switch(a){ case 0: return 0; case 1: return 1; case 2: return 2; case 3: return 3; case 4: return 4; case 5: return 5; case 6: return 6; case 7: return 7; } }
Strukturieren Sie die obige Funktion in diese um
function fn(a){ var retArr = [0,1,2,3,4,5,6,7]; return retArr[a]; }
Dies ist nicht nur prägnant und lesbar, sondern bietet auch eine bessere Leistung
Wenn die Anzahl der Bedingungen zunimmt, erzeugt die Nachschlagetabelle fast keinen zusätzlichen Leistungsaufwand
Aber sie eignet sich besser für Situationen, in denen eine logische Zuordnung zwischen a einzelner Schlüssel und ein einzelner Wert
Auch ein ternärer Operator
, der einer bedingten Anweisung ähnelt? :
entspricht if-else
Der ternäre Operator eignet sich besser für Situationen, in denen es um den Rückgabewert geht
Was bedeutet das?
var foo;;if(flag){ foo = 1; }else{ foo = 2; }
Es ist besser, es so umzuschreiben
var foo = flag ? 1 : 2;
Konzentrieren Sie sich auf den Rückgabewert von flag ? 1 : 2
Er wird direkt der foo-Variablen zugewiesen
Diese Situation eignet sich sehr gut für die Verwendung des ternären Operators
Das Obige betrifft Leistungsprobleme von bedingten Anweisungen in JavaScript
Obwohl wir selten eine große Anzahl von Bedingungen verwenden
und moderne Browser-JS-Engines auch sehr leistungsfähig sind (z. B. die V8-Engine [] ~( ̄▽ ̄)~*)
Aber es schadet nicht, etwas darüber zu wissen ...
Das Obige ist der Inhalt der Leistungsprobleme von JavaScript-bedingten Anweisungen. Weitere verwandte Inhalte Bitte beachten Sie die chinesische PHP-Website (m.sbmmt.com)!