どうもチャンクノです!
今回は前職の同僚にメモ化というものを教えてもらったのでそれについて書こうと思います。
その同僚いわく知っていたらドヤ顔できるらしいです。
できなくても僕のことは責めないで下さい。
まずメモ化ってなんだと思いますよね。
メモ化とは
メソッドが最初に呼び出されたときに戻り値がキャッシュされ、
それ以降、同じスコープ内でメソッドが呼び出されるたびにキャッシュされた値が返されることを意味します。
とのこと。
なるほど。分からんですね。
コードを見た方が手っ取り早いかもしれません。
簡単な例で書くと
def update
user.comment.update(comment_params)
end
private
def user
@user ||= User.find(params[:id])
end
色々省いて書きましたがこんな感じです。
注目する部分は
@user ||= User.find(params[:id])
ここですね。
||= この記述なんやねん、そう思うのではないでしょうか。
そうでしょうそうでしょう。
||= これは@userがnillの場合 User.find(params[:id])が@userに代入されます。
大事なのはこの後です。
これ二回目同じメソッドを呼び出した時にUser.find(params[:id])この部分の処理が走らないんですね。
なぜかと言うと一回目処理が走った時に、@userにキャッシュされてずっと残ってるらしいです。
つまり二回目以降はクエリが走らないのでアプリケーションのパフォーマンスが上がります。
ちなみにキャッシュとは
キャッシュ(caching)」とは、リクエスト・レスポンスのサイクルの中で生成されたコンテンツを保存しておき、
次回同じようなリクエストが発生したときのレスポンスでそのコンテンツを再利用することを指します。
とのこと。
これはなんとなく分かりました。
chromeでも画像のキャッシュとかありますよね。
あれと同じです。
つまりメモ化とは同じ処理を走らせる場合に、1回目の処理で返したレスポンスをキャッシュとして残しておいて、それ以降の処理パフォーマンスを上げようねってことだと思います。
処理速度が速くなればなるほど僕たちユーザーにとっても嬉しいことになるので積極的に使っていくといいのではないでしょうか。
自分もこれから意識していこうと思います。
使い方としてはsetterとして使うとのことでした!!!
開発者側もユーザー側も幸せになれるコードを書いていきましょう🙌
それでは今回はこの辺で。
皆様よきプログラミングライフを🙏