問題タブ [russian-doll-caching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
257 参照

ruby-on-rails - ロシアンドールを使用してキャッシュを手動で期限切れにする

多くの保存された検索と多くのタスクを持つことができるユーザーがいます。私は以下を使用してそれらをキャッシュしています

touchこれらのレコードのいずれかが更新されるたびに、オプションを介してユーザーを更新するオプションを追加しました。私が明確にしたい問題はこのシナリオです:

その検索のキャッシュと、事実上、ユーザーのキャッシュを期限切れにする検索を更新しました。ユーザーのキャッシュの有効期限が切れているため、user.tasksが実行されます。

これを防ぐ方法はありますか?

cache usergemを使用する前に行っていたキャッシュにキーを追加して手動で期限切れにすることを考えてcache_digestいますが、その方法がわかりません。

0 投票する
1 に答える
575 参照

ruby-on-rails - 動的コンテンツを含む静的 html をキャッシュする最良の方法は何ですか?

レールで Haml とロシア人形のキャッシングを使用しています。私の目標は、できるだけ多くの静的 html をキャッシュし、動的コンテンツのみをレンダリングすることです。ただし、途中に動的コードが少しあるため、キャッシュされていない html のセクションが大きいことがよくあります。

2 つのパーシャルを含むこのビューがあるとします。

show.html.haml

_container.html.haml

_dynamic.html.haml

_containerパーシャルには動的コンテンツが含まれているため、キャッシュ ブロックでラップできません。動的パーシャルの従属変数に基づいてキャッシュ ブロックにキーを設定できることは承知していますが、動的パーシャルの複雑さが高すぎてキャッシュできないと想定しています。

これを解決する良い方法は何ですか?

0 投票する
2 に答える
2648 参照

ruby-on-rails - has_many リレーションシップを使用したロシアン ドール キャッシング用の Rails アプリの構築

キーベースのキャッシュの有効期限とロシアン ドール キャッシングに関する DHH や他のブログ記事を調べた後でも、1 つのリレーション タイプを処理する方法がわかりません。具体的に言えば、has_many関係。

サンプルアプリでの調査結果を共有します。ちょっとした話ですので、ちょっと待ってください。次の ActiveRecord モデルがあるとします。私たちが気にかけているのは、モデルの を適切に変更することだけcache_keyですよね?

すでに 1 つの記事と 1 つのコメントがあります。どちらも別作者。目標はcache_key、次の場合に記事の を変更することです。

  1. 記事の本文またはタイトルの変更
  2. コメントの本文が変更されます
  3. 記事の著者名の変更
  4. 記事のコメントの作者名が変わります

したがって、デフォルトでは、ケース 1 と 2 に適しています。

ただし、ケース 3 には当てはまりません。

cache_keyの複合メソッドを定義しましょうArticle

勝つ!しかしもちろん、これはケース 4 では機能しません。

では、どのようなオプションが残っていますか?has_many上のアソシエーションを使用して何かを実行できますAuthorhas_many、オプションを使用しません{touch: true}。おそらく理由があります。次の行に沿って多少実装できると思います。

これは機能しますが。すべての記事とコメントを1 つずつ読み込み、インスタンス化、更新することで、パフォーマンスに大きな影響を与えます。それが適切な解決策だとは思いませんが、それは何ですか?

確かに 37signals の使用例 / 例は異なる場合があります: project -> todolist -> todo. しかし、1 つの todo アイテムもユーザーに属していると思います。

このキャッシュの問題をどのように解決しますか?

0 投票する
2 に答える
527 参照

ruby-on-rails - ロシア人形キャッシュを使用してキャッシュを暖かく保つ方法は?

私は、Rails アプリ、より具体的にはメインのダッシュボード ページでロシアン ドール フラグメント キャッシングを試してきました。これは、ユーザーがログインした後に最初に表示されるページであり、多くのネストされた要素が含まれているため、Russian Doll の有力候補です。

キャッシュは、アプリがダッシュボードを再レンダリングする必要がある変更をユーザー自身が行う状況でうまく機能します。キャッシュを使用した読み込み時間は、ページ全体をレンダリングするよりも約 4 倍高速です。

ただし、システムによってデータが変更される場合があります。たとえば、毎晩、前日の新しい為替レートですべての値を更新します。これにより、ダッシュボードのほとんどのフラグメントが自動的に期限切れになり、翌朝、ユーザーはログイン時にコールド キャッシュにヒットします。

これらのフラグメント キャッシュをウォーム状態に保つために、システム アップデート後にこれらのフラグメント キャッシュを再生成することは可能ですか? システムの更新後に手動でフラグメントを作成できると思いwriteますが、キーと依存関係も手動で管理する必要があります。(私は現在cache_digest非常に便利なgemを使用しています。)

何か案は?

0 投票する
1 に答える
414 参照

ruby-on-rails-3 - Rails 4.0.0.0のbeens_toモデルによるロシア人形のキャッシング

次のようにモデルにキャッシュを設定しました

そして私の見解では

そのため、ここには多くのショップがあり、それぞれに在庫商品の在庫があります。上記のキャッシュは、さまざまなショップでまったく機能しますか?

別のショップでビューを表示しても、キャッシュが壊れる可能性があると思います。または、在庫アイテムを追加するショップはキャッシュを壊します。

ロシア人形のキャッシングをこのように使用できますか?それとも、モデルで Inventory.all を使用する必要がありますか?

0 投票する
0 に答える
288 参照

ruby-on-rails - ロシア人形のキャッシュ ダイジェスト パーシャルが泡立たない

キャッシュ ダイジェストを使用したロシアン ドール キャッシングに関する私の理解から、フラグメントをバージョン管理する必要がないようにするために、子フラグメントを更新すると、ダイジェスト キーがバブルアップして親の有効期限が切れるはずです。

これが正しければ、親キャッシュの有効期限が切れていない子のテンプレートを更新しているという問題があります。このシナリオでは、/schoolworks/need_grading/row.html.haml の html を変更していますが、/schoolworks/need_grading/row.html.haml のキャッシュが原因で変更が反映されません。

2 つの異なるページの Haml コードは次のとおりです。

rake cache_digests:nested_dependencies TEMPLATE=schoolworks/need_grading を実行したところ、返されました

ネストされた依存関係がレンダリングされたパーシャルと一致するようです。これで親キャッシュが期限切れにならない理由がわかりません。

0 投票する
1 に答える
737 参照

ruby-on-rails - RailsのロシアンドールキャッシングとN+1

Railsでのロシア人形のキャッシュについて私が理解していることから、RDC(ロシア人形のキャッシュ)を実行しているときに、関連するオブジェクトまたはオブジェクトリストを熱心にロードすることは有害です.RDCではデータベースからトップレベルのオブジェクトをロードし、そのキャッシュされたレンダリングされたテンプレートとサーブ。キャッシュが古くない場合、関連するオブジェクト リストを熱心にロードすると、役に立たなくなります。

私の理解は正しいですか?はいの場合、最初の呼び出しですべての関連オブジェクトを熱心にロードして、最初のロード中に N+1 クエリのコストを支払わないようにするにはどうすればよいですか (キャッシュがウォームでない場合)。