Rubyはとにかく遅い。
綺麗なコードは書けるが、遅い。
だから、@hoge等でとにかくキャッシュをしている!
と言う人にお勧めのコードです。
インスタンスオブジェクトのメソッドをキャッシュするコードを作りました。
使い方は簡単で、キャッシュしたいメソッドに以下のように書くだけです。
何度も呼び出されて、なおかつ重いメソッドに対して有効です。(ただし、中身でevalを使っているので本当に早くしたい処理には使えません。)
また、引数がある場合は以下のように記載します。
ポイントはメソッドを定義した後に「instance_cache」を定義する事です。
また、コードを見れば分かると思いますが以下のような事も出来ます。
・特定のインスタンスではキャッシュをさせない。
・特定のインスタンスではプリミティブ型(Rubyにはプリミティブ型は無いので、一般的にそう思われるもの)だけをキャッシュさせる。
・メソッドの途中で一部の処理をキャッシュさせる。
このコードは僕がかなり愛用しているコードです。
良かったら使ってください。
綺麗なコードは書けるが、遅い。
だから、@hoge等でとにかくキャッシュをしている!
と言う人にお勧めのコードです。
インスタンスオブジェクトのメソッドをキャッシュするコードを作りました。
使い方は簡単で、キャッシュしたいメソッドに以下のように書くだけです。
def hogeこのようにすればhogeメソッドがインスタンスの中にキャッシュされます。
# 何かの処理
end
instance_cache :hoge
何度も呼び出されて、なおかつ重いメソッドに対して有効です。(ただし、中身でevalを使っているので本当に早くしたい処理には使えません。)
def hogeこのようなコードを書いている人に有効です。
return @hoge if @hoge
# 何かの処理
return @hoge = hogehoge
end
また、引数がある場合は以下のように記載します。
def hoge(foo)第二引数には、実際に渡される引数を定義してください。第三引数は任意です。fooの値によってキャッシュ値を変えたい場合はこちらを定義してください。
# 何かの処理
end
instance_cache :hoge, "foo", :foo
def hoge(foo = "test", foo2)foo2の値に依存したキャッシュだけを行う場合の書き方。
# 何かの処理
end
instance_cache :hoge, "foo=\"test\", foo2", foo2
ポイントはメソッドを定義した後に「instance_cache」を定義する事です。
また、コードを見れば分かると思いますが以下のような事も出来ます。
・特定のインスタンスではキャッシュをさせない。
・特定のインスタンスではプリミティブ型(Rubyにはプリミティブ型は無いので、一般的にそう思われるもの)だけをキャッシュさせる。
・メソッドの途中で一部の処理をキャッシュさせる。
このコードは僕がかなり愛用しているコードです。
良かったら使ってください。