2017-02-27 8 views
2

私は暗記のメリットについて聞いたことがありますが、どのように動作するのか分かりません。例えば、In:私の知識あたりとしてRuby Memoizationはどのように機能しますか?

class User < ActiveRecord::Base 
    def twitter_followers 
    # assuming twitter_user.followers makes a network call 
    @twitter_followers ||= twitter_user.followers 
    end 
end 

@twitter_followersは、インスタンス変数であり、唯一の要求のためのスコープ内に残ります

I(それがビューでアクセスできるようにします。)クエリを実行する代わりにキャッシュされた結果を使用するかどうかにかかわらず、同じユーザーが同じページをリフレッシュするかどうかはわかりません。

+0

用語は「メモ」です.btwです。 –

答えて

3

Userのインスタンスを持ち、別の場所でuser.twitter_followersコールを持つことができます。

メモ化なしメモ化で唯一つの要求が行われると、すべての結果としての呼び出しが@twitter_followers変数を設定し使用するのに対し、それは、user.twitter_followersを呼び出すたびに新しいtwitter_user.followers要求を意味します。

だから私は、同じユーザーが 、クエリを発射するのではなく、キャッシュされた結果を使用します。もう一度同じページを更新するかどうかわからないのですか?

ページリフレッシュでは新しいリクエストになります。

私の答えが暗示しているように、この単一のページ内にuser.twitter_followersを複数回参照している場合など、メモの利点を利用できます。

モデル/サービス/ワーカー/他のバックエンド関連のメモ帳がある場所では、実際に違いがあります。

+0

その新しい要求があれば、記憶は適用されませんよね? 1つのリクエスト内で同じものを複数回呼び出すだけで有益です。 –

+0

@DeepakKumarPadhyはい、すべての新しいリクエスト==新しいツイートのリクエストです。あなたの考え方から考えると良いことです) –

+0

あなたのかなり明確な説明に感謝します。 –

1

まず、クエリを起動します。これは、Userモデルのインスタンスのインスタンス変数としてメモリに格納されます。 Userモデルのインスタンスは、リクエストごとに常にリロードされます。

関連する問題