操作
最適化 #1315
未完了filterの戻り値を加工しない場合、配列よりもアロケートのコストが軽いオブジェクトで代用する
開始日:
2019-02-10
期日:
進捗率:
0%
プラグイン名:
説明
動機¶
メモリプロファイルを取ったところ、以下のようなコードで作成される配列が大量にあった。フィルタを過剰に呼び出さない工夫も必要だが、大抵のフィルタは値を加工しないので、値を加工しなかったことを示すキーワードを代わりに返すことで、ほとんどのフィルタ呼び出しで配列の作成を1回削減できる。
対応¶
値を加工しなかったことを示す値には以下の候補がある:
- nil
: やりやすいが見慣れていないと何のことかわからない
- 何らかのSymbolや定数: オブジェクトを作成しない。意図が明確になる。
- 何らかのメソッド: 今もフィルタを強制的にキャンセルするために Filter.cancel
とか書いてるので、 Filter.pass
とか書いたら帯域脱出した上でパスできると良いかも。
- filter_xxxの引数に加工しないという宣言を与える: 戻り値が偶然衝突することはないが融通は効かない
操作