問題タブ [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.
ruby-on-rails - ロシアンドールを使用してキャッシュを手動で期限切れにする
多くの保存された検索と多くのタスクを持つことができるユーザーがいます。私は以下を使用してそれらをキャッシュしています
touch
これらのレコードのいずれかが更新されるたびに、オプションを介してユーザーを更新するオプションを追加しました。私が明確にしたい問題はこのシナリオです:
その検索のキャッシュと、事実上、ユーザーのキャッシュを期限切れにする検索を更新しました。ユーザーのキャッシュの有効期限が切れているため、user.tasks
が実行されます。
これを防ぐ方法はありますか?
cache user
gemを使用する前に行っていたキャッシュにキーを追加して手動で期限切れにすることを考えてcache_digest
いますが、その方法がわかりません。
ruby-on-rails - 動的コンテンツを含む静的 html をキャッシュする最良の方法は何ですか?
レールで Haml とロシア人形のキャッシングを使用しています。私の目標は、できるだけ多くの静的 html をキャッシュし、動的コンテンツのみをレンダリングすることです。ただし、途中に動的コードが少しあるため、キャッシュされていない html のセクションが大きいことがよくあります。
2 つのパーシャルを含むこのビューがあるとします。
show.html.haml
_container.html.haml
_dynamic.html.haml
_container
パーシャルには動的コンテンツが含まれているため、キャッシュ ブロックでラップできません。動的パーシャルの従属変数に基づいてキャッシュ ブロックにキーを設定できることは承知していますが、動的パーシャルの複雑さが高すぎてキャッシュできないと想定しています。
これを解決する良い方法は何ですか?
ruby-on-rails - has_many リレーションシップを使用したロシアン ドール キャッシング用の Rails アプリの構築
キーベースのキャッシュの有効期限とロシアン ドール キャッシングに関する DHH や他のブログ記事を調べた後でも、1 つのリレーション タイプを処理する方法がわかりません。具体的に言えば、has_many
関係。
サンプルアプリでの調査結果を共有します。ちょっとした話ですので、ちょっと待ってください。次の ActiveRecord モデルがあるとします。私たちが気にかけているのは、モデルの を適切に変更することだけcache_key
ですよね?
すでに 1 つの記事と 1 つのコメントがあります。どちらも別作者。目標はcache_key
、次の場合に記事の を変更することです。
- 記事の本文またはタイトルの変更
- コメントの本文が変更されます
- 記事の著者名の変更
- 記事のコメントの作者名が変わります
したがって、デフォルトでは、ケース 1 と 2 に適しています。
ただし、ケース 3 には当てはまりません。
cache_key
の複合メソッドを定義しましょうArticle
。
勝つ!しかしもちろん、これはケース 4 では機能しません。
では、どのようなオプションが残っていますか?has_many
上のアソシエーションを使用して何かを実行できますAuthor
がhas_many
、オプションを使用しません{touch: true}
。おそらく理由があります。次の行に沿って多少実装できると思います。
これは機能しますが。すべての記事とコメントを1 つずつ読み込み、インスタンス化、更新することで、パフォーマンスに大きな影響を与えます。それが適切な解決策だとは思いませんが、それは何ですか?
確かに 37signals の使用例 / 例は異なる場合があります: project -> todolist -> todo
. しかし、1 つの todo アイテムもユーザーに属していると思います。
このキャッシュの問題をどのように解決しますか?
ruby-on-rails - ロシア人形キャッシュを使用してキャッシュを暖かく保つ方法は?
私は、Rails アプリ、より具体的にはメインのダッシュボード ページでロシアン ドール フラグメント キャッシングを試してきました。これは、ユーザーがログインした後に最初に表示されるページであり、多くのネストされた要素が含まれているため、Russian Doll の有力候補です。
キャッシュは、アプリがダッシュボードを再レンダリングする必要がある変更をユーザー自身が行う状況でうまく機能します。キャッシュを使用した読み込み時間は、ページ全体をレンダリングするよりも約 4 倍高速です。
ただし、システムによってデータが変更される場合があります。たとえば、毎晩、前日の新しい為替レートですべての値を更新します。これにより、ダッシュボードのほとんどのフラグメントが自動的に期限切れになり、翌朝、ユーザーはログイン時にコールド キャッシュにヒットします。
これらのフラグメント キャッシュをウォーム状態に保つために、システム アップデート後にこれらのフラグメント キャッシュを再生成することは可能ですか? システムの更新後に手動でフラグメントを作成できると思いwrite
ますが、キーと依存関係も手動で管理する必要があります。(私は現在cache_digest
非常に便利なgemを使用しています。)
何か案は?
ruby-on-rails-3 - Rails 4.0.0.0のbeens_toモデルによるロシア人形のキャッシング
次のようにモデルにキャッシュを設定しました
そして私の見解では
そのため、ここには多くのショップがあり、それぞれに在庫商品の在庫があります。上記のキャッシュは、さまざまなショップでまったく機能しますか?
別のショップでビューを表示しても、キャッシュが壊れる可能性があると思います。または、在庫アイテムを追加するショップはキャッシュを壊します。
ロシア人形のキャッシングをこのように使用できますか?それとも、モデルで Inventory.all を使用する必要がありますか?
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 を実行したところ、返されました
ネストされた依存関係がレンダリングされたパーシャルと一致するようです。これで親キャッシュが期限切れにならない理由がわかりません。
ruby-on-rails - RailsのロシアンドールキャッシングとN+1
Railsでのロシア人形のキャッシュについて私が理解していることから、RDC(ロシア人形のキャッシュ)を実行しているときに、関連するオブジェクトまたはオブジェクトリストを熱心にロードすることは有害です.RDCではデータベースからトップレベルのオブジェクトをロードし、そのキャッシュされたレンダリングされたテンプレートとサーブ。キャッシュが古くない場合、関連するオブジェクト リストを熱心にロードすると、役に立たなくなります。
私の理解は正しいですか?はいの場合、最初の呼び出しですべての関連オブジェクトを熱心にロードして、最初のロード中に N+1 クエリのコストを支払わないようにするにはどうすればよいですか (キャッシュがウォームでない場合)。