you21979の日記

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

最適化

↓の記事を読んで自分なりに解釈

https://github.com/felixge/faster-than-c

 

こんなかんじで最適化してるのか。DSLでソースコードジェネレートすればこういうのもありだな。オブジェクトを初期化時に項目を設定することが最適化につながるようだ

--

最適化前

var columns = [
    {name : 'end1'},
    {name : 'end2'},
    {name : 'end3'},
    {name : 'end4'},
    {name : 'end5'},
    {name : 'end6'},
    {name : 'end7'},
    {name : 'end8'},
    {name : 'end9'},
    {name : 'end'}
];
function parseRow(columns, parser) {
  var row = {};
  for (var i = 0; i < columns.length; i++) {
    row[columns[i].name] = parser.readColumnValue();
  }
  return row;
}

--

最適化後

function parseRow(parser) {
  return {
    "end1":parser.readColumnValue(),
    "end2":parser.readColumnValue(),
    "end3":parser.readColumnValue(),
    "end4":parser.readColumnValue(),
    "end5":parser.readColumnValue(),
    "end6":parser.readColumnValue(),
    "end7":parser.readColumnValue(),
    "end8":parser.readColumnValue(),
    "end9":parser.readColumnValue(),
    "end":parser.readColumnValue(),
  };
}

#new Functionってevalだと思うけど最適化とかJITかかるのか?

とおもったけど驚愕するようだから効くのだろう。。。

eval is awesome (when using its twin new Function(), eval() itself sucks)

 

#大きなswitch文はだめなのか?

自分はディスパッチャでswitch文使いまくってるが。。。