問題タブ [fragment-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 - Railsフラグメントのキャッシュとタイムスタンプが表示されます
スポーツをベースにしたツイッターとフェイスブックのミックスのようなソーシャルネットワークを開発しています。Post(id、user_id、receiver_id、message、created_at)というモデルがあり、Postビューをキャッシュしたいと思います。
app / views / posts / _post.haml
昨日はすべて完全に機能しましたが、「ホームフィード」にアクセスすると、タイムスタンプがキャッシュされていることに気付きました。例を示しましょう:
「1分未満前」ではなく、「昨日」と表示する必要があります。タイムスタンプをキャッシュしない方法はありますか?それを修正するために何をお勧めしますか?
タイムスタンプを取得するためにAJAX呼び出しを行うことを考えましたが、それは非常に奇妙で良くありません。
ruby-on-rails-3 - Rails のフラグメント キャッシュで一部のフィールドが古い値を取得する
データベースに保存されているリソースの詳細を表示するビューがあります。一部の詳細はリソース モデル自体に属し、一部の詳細は関連モデルに属します。
ビューでは、詳細にフラグメント キャッシングを使用します。
ユーザーがビューのボタンを押すと、ビューの一部がフォームに置き換えられるため、ユーザーは新しいページをロードせずに詳細を編集できます。フォームを開いた時点でキャッシュの有効期限が切れています(実際に確認しました)。ユーザーがフォーム ( ) を送信するusing :remote => true
と、フォームは非表示になり、jQuery を使用して元のコンテンツがリロードされ、部分的にレンダリングされます。
これまでのところ、すべてがうまく機能しています。<% cache ... do %>
と内のコードから、元のコンテンツが新しい値で正しく再読み込みされます<% end %>
。
奇妙なことに、ページをリロードすると、新しい値の一部が消えてしまいます。代わりに、いくつかの古い値が表示されます (最後の送信後にキャッシュされているはずの値)。さらに奇妙なのは、間違った値と同じ新しいキャッシュ ファイルにある場合でも、一部の値が更新されることです。
私が見る限り、関連付けられたモデルの値は正しく、リソース モデルの値は間違っています (古い)。SQLキャッシュと関係があるのではないかと思っていましたが、ページをリロードするときにSQLキャッシュを空にする必要があると思うので、そうではないと思います。
フォームを開いて再度送信すると、データが更新され、すべて問題ありません。つまり、最後の送信からのデータがキャッシュに入っています。送信前にフォームのデータを変更しても、キャッシュ ファイルに含まれるのは最後の送信のデータのままです。そのため、他のフィールドが正しく更新されていても、Resource モデル用に送信されたデータが 1 回送信されるのが遅れているようです。
development.rb でキャッシュをオフにすると、すべてが期待どおりに機能します。すべてのデータは毎回更新されます。
ちなみに、私のサーバーにも同じ問題があります。
手がかりを持っている人はいますか?
ruby-on-rails - Railsに手動でキャッシュを投入する
Rails 3.xでは、キャッシュを手動でプリコンパイルしたいので、モデルインスタンスと静的HTMLのビューでフラグメントキャッシュを使用します。
ページが要求されると、Railsはキャッシュに遅延してデータを入力します。その結果、最初のロードでのロード時間が遅くなります。
したがって、このサンプルコードを考えると:
キャッシュにRubyを手動で設定するにはどうすればよいですか?
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 - Railsフラグメントキャッシング:100K以上のフラグメントはパフォーマンスを低下させますか?
私は大量のデータを持つサイトを持っており、次のようにすべてのページで「ロシア人形」のキャッシュを行っています。
これにより、数十万のフラグメントが作成されます。
1. /tmp/cache ディレクトリに非常に多くのフラグメント ファイルがあると、パフォーマンスが低下しますか?
2.古いフラグメントが自動期限切れになると、Rail は古いフラグメントを自動的に削除しますか?
PS。このサイトは、4GB RAM を搭載した単一の Ubuntu サーバー上にあります。キャッシュ ストアとして memcached を使用するのではなく、標準のファイル ベースの実装をレールですぐに使用できます。