MessagePack-JS (5)

cuzic です。

http://d.hatena.ne.jp/uupaa/20100525/1274729065
で、uupaa さんが私が作ったバージョンより大幅に高速なバージョンの MessagePack の JavaScript 実装を作成されたそうです。

私の JavaScript スキルはそれほど高くないですので、uupaa さんの実装を読んで、どのように実装すると高速化できるかについて、かなり勉強になりました。

私がソースコードを読んで理解した中で、高速化につながった理由について、効果があったであろう順に書きます。識者の方は間違っている点など指摘してもらえれば、うれしいです。

  • メソッド呼び出しが最小限。処理はできる限り直接記述する。
  • 下記の書き方のように、1番外側でメソッド定義。
function function_name(){ 
  ...
}
  • 変数宣言はメソッドの最初に必要な分を一気に実施。
  • 何度も使う定数については、事前に生成し、複数回計算は行わせない。
  • 何度も使うメソッドについても、別の変数に事前に代入し、不要な「.」演算などを避ける
  • switch-case の書き方、処理の流れをコンパクトに記述。
  • 上とつながるが、全体にソースコードが短く。処理が簡潔。

どれがどのくらい高速化に効いているかについては私にはよく分かりませんが、http://javascript.g.hatena.ne.jp/edvakf/20100604 によると、全体として FireFox の場合10倍程度高速化できているようなので、劇的に高速に動作するようになっていますね。