2008-05-24
switchとifの速度を比べてみた
Firefox 3とFirebugで始めるJavaScript開発:第2回 Firebugによるデバッグの基本,Console APIとその活用|gihyo.jp … 技術評論社にてプロファイルのとり方が載っていたので試した。
中核は以下のもの。switchが速いのは比較が == じゃなくて === を使っているからだという話がDeLLa.JSの方で出ていたので、ifは2バージョン作って試す。
console.profile(); function Switch() { var a = [0, 0, 0, 0, 0, 0, 0]; var tmp; for(var i = 0; i < 1000; i++) { tmp = i % 7; switch(tmp) { case 0: a[0]++; break; case 1: a[1]++; break; case 2: a[2]++; break; case 3: a[3]++; break; case 4: a[4]++; break; case 5: a[5]++; break; default: // case 6 a[6]++; } console.count(); } } function If() { var a = [0, 0, 0, 0, 0, 0, 0]; var tmp; for(var i = 0; i < 1000; i++) { tmp = i % 7; if(tmp == 0) a[0]++; else if(tmp == 1) a[1]++; else if(tmp == 2) a[2]++; else if(tmp == 3) a[3]++; else if(tmp == 4) a[4]++; else if(tmp == 5) a[5]++; else a[6]++; console.count(); } } function If2() { var a = [0, 0, 0, 0, 0, 0, 0]; var tmp; for(var i = 0; i < 1000; i++) { tmp = i % 7; if(tmp === 0) a[0]++; else if(tmp === 1) a[1]++; else if(tmp === 2) a[2]++; else if(tmp === 3) a[3]++; else if(tmp === 4) a[4]++; else if(tmp === 5) a[5]++; else a[6]++; console.count(); } } for(var i = 0; i < 10; i++) { Switch(); If(); If2(); } console.profileEnd();
結果は以下のようになった。
| Function | Calls | Percent | Own Time | Time | Avg | Min | Max |
|---|---|---|---|---|---|---|---|
| If | 10 | 46.27% | 1249.23ms | 1249.398ms | 124.94ms | 70.098ms | 563.859ms |
| If2 | 10 | 27.12% | 732.247ms | 732.41ms | 73.241ms | 71.225ms | 74.75ms |
| Switch | 10 | 26.62% | 718.656ms | 718.822ms | 71.882ms | 69.265ms | 74.165ms |
やはりSwitchが一番速い。が、===の方のifと明らかな差は無かった。jumpの回数が減るからswitchは速いという訳でもないらしい。
そういえば、プロファイルをとろうしたとき詳細は分からないけどローカルのファイルでは駄目だった。設定かなにかでどうにかはなるのかもしれない。仕方が無いのでNiftyの方にアップして実行している。ファイルはhttp://kokosabu.way-nifty.com/test/switch.htmlなので、良かったら自分でもやっていただければと思う。
トラックバック - http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944
リンク元
- 82 http://www.google.co.jp/url?sa=t&rct=j&q=switch if 速度&source=web&cd=2&ved=0CCwQFjAB&url=http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944&ei=Xi-lTraOAonFmAWGmcijCQ&usg=AFQjCNFR-pqqS9GN5hQ5lDndrC-SCLIkQg
- 77 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADBR_jaJP240JP241&q=JavaScript+Switch+if+処理速度
- 69 http://www.google.co.jp/search?hl=ja&source=hp&q=if+switch+速度&lr=&aq=2&oq=if+sw
- 67 http://www.google.co.jp/url?sa=t&rct=j&q=if switch 速度&source=web&cd=2&ved=0CCsQFjAB&url=http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944&ei=h32fTrHPMoaaiQeQr9TPBg&usg=AFQjCNFR-pqqS9GN5hQ5lDndrC-SCLIkQg&sig2=uW8AOKjXw
- 60 http://reader.livedoor.com/reader/
- 58 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCAQFjAB&url=http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944&rct=j&q=if switch javascript&ei=yMGyTYTqL4X4vwPkzfSTBw&usg=AFQjCNFR-pqqS9GN5hQ5lDndrC-SCLIkQg&sig2=844YqPyFd0Dpazved
- 53 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDMQFjAB&url=http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944&ei=rAZLT6DPBqGEmQXO7ez9DQ&usg=AFQjCNFR-pqqS9GN5hQ5lDndrC-SCLIkQg&sig2=TRXo6OD5DysKOODtoGVM4g
- 48 http://www.google.co.jp/url?sa=t&rct=j&q=if+switch+速度&source=web&cd=2&ved=0CCwQFjAB&url=http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944&ei=F9jUTvbzHKObmQWS1pVi&usg=AFQjCNFR-pqqS9GN5hQ5lDndrC-SCLIkQg
- 47 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=UIq&q=else+if+Switch&btnG=検索&lr=lang_ja
- 47 http://www.google.co.jp/search?hl=ja&q=if+switch+速度&btnG=Google+検索&lr=

