you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

最適化2

前回の最適化で気になったので調べてみた

http://you21979.hateblo.jp/entry/2012/10/19/143845

 

nodejsでswitch ~ case遅いとあったけど実際に試してみて5000超えたあたりから許容できないかもしれない

 

20000のenumを作ってcaseしまくってるのだが

https://github.com/you21979/nodejsbenchmark/blob/master/v8/bigswitchcase.js

switch文の上の方ほどはやく下のほうが遅い。キャッチできなくでも下のほうと同様に遅い。

switch1: 0ms

switch2: 3ms

switch3: 30ms

switch4: 89ms

switch5: 69ms

 

関数テーブルで実装したほうが早い

https://github.com/you21979/nodejsbenchmark/blob/master/v8/bigfunctable.js

switch1: 0ms

switch2: 0ms

switch3: 0ms

switch4: 1ms

switch5: 0ms

 

 

中身ジャンプテーブルに展開されないんかなぁ。

 

手で書いたswitch文は気にしなくてもいいがDSLなどから自動生成したdispatcherを扱う場合には気をつけたほうがいいかも。