Ich verwende switch-case
Aussagen regelmäßig in ECMAscript. Neben meiner persönlichen Befürwortung, gibt es Tonnen von Fachliteratur, über die Leistung in dieser Sprache im Allgemeinen und über bedingte Aussagen speziell.Switch-Case-Leistung in ECMAscript
Ein gutes Beispiel, ich erinnere mich zum Beispiel, ist das ausgezeichnete Buch "High Performance Javascript" von Nicholas Zakas. Wie in vielen anderen Büchern und Artikeln, es wird gesagt, dass eine switch-case
Aussage ist immer schneller als if (else)
Aussagen, wenn Sie mehr als zwei bedingte Fälle verwenden.
In jeder C-wie Sprache, die ich kenne, eine switch-case
Aussage nichts anderes als eine binary-Hash-Karte ist, die wieder abgebaut, ist eine Kette von jmp Codes in der Montage. Habe gut ein here
Doch nach diesem Vorwort lesen:
ich eine Diskussion über die Verwendung von Event-Handler-Funktionen hatte mit meinem Team und wie wir mit Event-Typen werden beschäftigen. Ob wir eine explizite Funktion für irgendein Ereignis verwenden oder nicht, oder ob wir eine große Funktion verwenden sollten, die mehrere Ereignistypen behandelt. Im Rahmen dieser Diskussion entwickelte sich die Performance Frage und wir haben ein sehr einfaches, einfach jsPerf:
http://jsperf.com/engine-context-data-caching-test/3
Und ich war ziemlich schockiert über die Ergebnisse und was ich sah. An diese Testfälle glaubend, ist die Bestellung von case statements
drastisch auf der Ausführung der Ausführung wichtig. Der Unterschied zwischen long
und longSlow
dort ist nur die Position der case 'baz'
Erklärung innerhalb der switch
Aussage. Ist das echt und vernünftig?
Gibt es eine Chance, dass ich etwas übersehen? Zuerst dachte ich gut, vielleicht ist es nicht genug case
Aussagen und der Interpreter schafft nur if-else
Bedingungen unter der Haube, so dass ich die Zahl ohne Änderung der Ergebnisse erhöht.
Ich lehne ab, nur dass ECMAscript Motoren zu glauben, wie V8 und Spider, noch nicht um dieses Problem zu optimieren.
Ihre Antwort wird geschätzt, aber sie beantwortet die Frage überhaupt nicht. Sie sollten die Frage noch einmal durchlesen und vielleicht eine gründliche Antwort geben :) –