読者です 読者をやめる 読者になる 読者になる

SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

IF 対 SWITCH JavaScript対決


本日、参加させて頂いた「Head First JavaScript読書会 03」で、少し話題になったんですが、書籍にあったif-elseがswitchより効率が悪いという話。
検索すると、普段使ってる.NETでは、「switchの方が効率いいコードにコンパイルされるよ」という記事のほうが多く見つかるようなのですが・・・・JavaScriptではどうなんだろうという事で、試してみました。

結論としては、結構、面白い結果になりました。64bit Windows7

google chrome】 ifの勝ち
if : 81
switch : 490
if : 77
switch : 465

IE】 引き分け
if : 607
switch : 697
if : 566
switch : 675

Firefox】 switchの勝ち
if : 155
switch : 86
if : 115
switch : 82

※ブラウザ対抗という意味では、Firefox > Chrome > IE って事になるでしょうか・・・

恥ずかしながら、私、JavaScriptが、超初心者状態ですので、思いっきり勘違いしているかも知れません。
突っ込みどころ満載だと思うのですが、ぜひ、色々ろ教えてやって下さい。
(やや、くどいコードになっているのは、一応、書籍のサンプルをできるだけ真似たためとなってます)

[javascript]
<html>
<head>
<script type="text/javascript">
var count=10000000;

func2(count);
func1(count);
func2(count);
func1(count);

function func1(c) {
var chosenCase = "E";

var startTime = new Date();
for(i=0;i<c;i++){
switch(chosenCase){
case "A":
openCase("A");
break;
case "B":
openCase("B");
break;
case "C":
openCase("C");
break;
case "D":
openCase("D");
break;
case "E":
openCase("E");
break;
}
}
document.write("<br>switch : "+ (new Date() - startTime));
}

function func2(c) {
var chosenCase = "E";

var startTime = new Date();
for(i=0;i<c;i++){
if(chosenCase == "A")
openCase("A");
else if(chosenCase == "B")
openCase("B");
else if(chosenCase == "C")
openCase("C");
else if(chosenCase == "D")
openCase("D");
else if(chosenCase == "E")
openCase("E");
}
document.write("<br>if : "+ (new Date() - startTime));
}

function openCase(s){
;
}

</script>
</head>
<body>
</body>
[/javascript]