問題タブ [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.

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

ruby-on-rails - Railsフラグメントのキャッシュとタイムスタンプが表示されます

スポーツをベースにしたツイッターとフェイスブックのミックスのようなソーシャルネットワークを開発しています。Post(id、user_id、receiver_id、message、created_at)というモデルがあり、Postビューをキャッシュしたいと思います。

app / views / posts / _post.haml

昨日はすべて完全に機能しましたが、「ホームフィード」にアクセスすると、タイムスタンプがキャッシュされていることに気付きました。例を示しましょう:

「1分未満前」ではなく、「昨日」と表示する必要があります。タイムスタンプをキャッシュしない方法はありますか?それを修正するために何をお勧めしますか?

タイムスタンプを取得するためにAJAX呼び出しを行うことを考えましたが、それは非常に奇妙で良くありません。

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

ruby-on-rails-3 - Rails のフラグメント キャッシュで一部のフィールドが古い値を取得する

データベースに保存されているリソースの詳細を表示するビューがあります。一部の詳細はリソース モデル自体に属し、一部の詳細は関連モデルに属します。

ビューでは、詳細にフラグメント キャッシングを使用します。

ユーザーがビューのボタンを押すと、ビューの一部がフォームに置き換えられるため、ユーザーは新しいページをロードせずに詳細を編集できます。フォームを開いた時点でキャッシュの有効期限が切れています(実際に確認しました)。ユーザーがフォーム ( ) を送信するusing :remote => trueと、フォームは非表示になり、jQuery を使用して元のコンテンツがリロードされ、部分的にレンダリングされます。

これまでのところ、すべてがうまく機能しています。<% cache ... do %>と内のコードから、元のコンテンツが新しい値で正しく再読み込みされます<% end %>

奇妙なことに、ページをリロードすると、新しい値の一部が消えてしまいます。代わりに、いくつかの古い値が表示されます (最後の送信後にキャッシュされているはずの値)。さらに奇妙なのは、間違った値と同じ新しいキャッシュ ファイルにある場合でも、一部の値が更新されることです。

私が見る限り、関連付けられたモデルの値は正しく、リソース モデルの値は間違っています (古い)。SQLキャッシュと関係があるのではないかと思っていましたが、ページをリロードするときにSQLキャッシュを空にする必要があると思うので、そうではないと思います。

フォームを開いて再度送信すると、データが更新され、すべて問題ありません。つまり、最後の送信からのデータがキャッシュに入っています。送信前にフォームのデータを変更しても、キャッシュ ファイルに含まれるのは最後の送信のデータのままです。そのため、他のフィールドが正しく更新されていても、Resource モデル用に送信されたデータが 1 回送信されるのが遅れているようです。

development.rb でキャッシュをオフにすると、すべてが期待どおりに機能します。すべてのデータは毎回更新されます。

ちなみに、私のサーバーにも同じ問題があります。

手がかりを持っている人はいますか?

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

ruby-on-rails - Railsに手動でキャッシュを投入する

Rails 3.xでは、キャッシュを手動でプリコンパイルしたいので、モデルインスタンスと静的HTMLのビューでフラグメントキャッシュを使用します。

ページが要求されると、Railsはキャッシュに遅延してデータを入力します。その結果、最初のロードでのロード時間が遅くなります。

したがって、このサンプルコードを考えると:

キャッシュにRubyを手動で設定するにはどうすればよいですか?

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 投票する
2 に答える
405 参照

ruby-on-rails - Railsフラグメントキャッシング:100K以上のフラグメントはパフォーマンスを低下させますか?

私は大量のデータを持つサイトを持っており、次のようにすべてのページで「ロシア人形」のキャッシュを行っています。

これにより、数十万のフラグメントが作成されます。

1. /tmp/cache ディレクトリに非常に多くのフラグメント ファイルがあると、パフォーマンスが低下しますか?

2.古いフラグメントが自動期限切れになると、Rail は古いフラグメントを自動的に削除しますか?

PS。このサイトは、4GB RAM を搭載した単一の Ubuntu サーバー上にあります。キャッシュ ストアとして memcached を使用するのではなく、標準のファイル ベースの実装をレールですぐに使用できます。