ロジック高速化の処方箋 for OO言語
1) オブジェクトの生成(取得)回数を減らす。
1-1) 生成(取得)後、変更されることのないオブジェクトは一度だけ生成
(取得)する。
1-1-1) 複数のメソッドで利用され、そのオブジェクトの生成が
所属するクラスのプロパティに左右されない場合、
クラス(静的)変数にする。
(Rubyの場合、定数でも可)
※Javaの場合、埋め込み文字列リテラルについては
コンパイラがクラス(静的)変数相当に変換したバイトコード
を生成します。
(Javaの場合の場合、Stringクラスはimmutableなので可能)
1-1-2) 複数のメソッドで利用され、そのオブジェクトの生成が
所属するクラスのプロパティに左右される場合、
インスタンス変数にする。
1-2) 一時(使い捨て)オブジェクト・一時(使い捨て)変数は再利用する。
1-2-1) 複数のメソッドで同じ用途の一時オブジェクトがある場合、
インスタンス変数に格納する。一度だけオブジェクトを
生成・格納、後は(初期化し)再利用する。
※オブジェクトの初期化よりもオブジェクトの生成に時間の
掛かる場合
2) 生成(or取得)に時間の掛かるオブジェクトは生成(取得)後、再利用する。
2-1) キャッシュする
→リファレンス(ポインタ)をハッシュ等に格納し保持する。
2-2)生成よりも取得に時間の掛かるオブジェクトは、複製(copy)する。
→全てを深いcopyにすると低速になるので、浅いcopyとの併用を
考える。
推敲中...。