スイッチとには、/文のベストプラクティスに関する多くの議論とコメントがあります。私は人々がと言っているのを見て、スイッチの代わりにオブジェクトリテラルを使うべきです。switch文ではなくオブジェクトリテラルを使用
(function(test){
var bar;
switch(bar) {
case 1:
bar = 'red';
break;
case 2:
bar = 'blue';
break;
case 3:
bar = 'yellow';
break;
case 4:
bar = 'green';
break;
case 5:
bar = 'black';
break;
}
return bar;
})(5);
と谷オブジェクトリテラル渡し:
だから私は、スイッチ間のこの場合と再現しました。このtestを実行した後
(function(test){
return { 1: 'red', 2: 'blue', 3: 'yellow', 4: 'green', 5: 'black' }[ test ];
})(5);
を、それがswitchステートメントことが明らかと思われますテストされた値をオブジェクトリテラルで呼び出すよりも高速です。
私のテストは間違っていますか?この場合、1つまたは別の方法を使用する前に、どうすればよいですか?または、私がこの主題について見た意見がちょっと間違っていて、私はファンダメンタルズを迂回しようとすべきではありません...
あなたのテストは問題ありません。あなたはスピードのためにメモリを取引しています(これはほとんどいつでも行うことができます)。早期/微細最適化に携わっている可能性もあります。さらに、オブジェクトでは、(関数呼び出しのオーバーヘッドで値が呼び出されない限り)任意のコードを実行することはできません。一般的には、個々のコード呼び出しではなく、最初に_algorithms_を最適化するよう努力してください。 – Phrogz
ああ、あなたのテストには問題が1つあります。新しい関数呼び出しのたびにオブジェクトリテラルを再インスタンス化しています。そのオブジェクトを事前に割り当てて、やり直してください。また、現代のJIT JSランタイムでは、そのようなコードの小さなループを頻繁にテストすると、実世界のパフォーマンスを示すものではないかもしれない命令の書き換えが行われることに注意してください。 – Phrogz
@Phrogz http://jsperf.com/switch-from-switches/4;私はまだオブジェクト記法を使用するファンではありません。 – NullUserException