問題タブ [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フラグメントキャッシングでmemcachedのワイルドカード有効期限の欠如に対処する
ログイン ユーザーと匿名ユーザーの両方がいる Rails 3 サイトにフラグメント キャッシュを追加する作業を行っており、サイト全体に表示されるコンテンツがいつ更新されるかに基づいて、ページの一部が期限切れになるタイミングを制御する必要があります。これの途中で、memcached が expire_fragment の正規表現をサポートしていないことがわかったので、これを回避する方法を探しています。
匿名ユーザーにとって、これは大きな問題ではありません。「frontpage-new-shows」や「schedule-weekly-forecast-10/24/10」などのキャッシュ キーを作成し、ショー モデルに新しいエントリが作成されたとき、または次の週に放映されるショーのときに期限切れにしますスイーパーによって変更されます。それはうまくいきます。
私の問題は、ログインしているユーザーにあります。それぞれが独自のカスタマイズされたスケジュールを持っているため、キーは 'schedule-user-jschuur-10/10/24' のようになり、jschuur がアカウントのユーザー名になります。日付ベースの規則では、それらは自然に期限切れになることを理解していますが、その日 (または週) のスケジュールでショー関連の変更が発生した日中に、キャッシュされたスケジュールのすべてのフラグメントを明示的に期限切れにしたいと考えています。
結局のところ、memcached は、ここで必要なワイルドカードの有効期限 (schedule-user-.*-10/10/24) を行うことができません。これは、発行されたすべてのキーを memcached の中央検索キーに格納する何らかのソリューションが必要であることを意味します。または、memcached に送信したキーに基づいて Rails/Ruby に何らかの方法でこれを内部的に実行させる必要があります。
私は前者がより良い解決策であると仮定しています。私の質問は、これを最も効率的な方法で行うにはどうすればよいかということです。そのため、DB にヒットすることなく節約された時間を常に吹き飛ばすことはありません。配列またはハッシュをmemcachedに保存し、全体を取得し、一致する場合はループオーバーし、それらを削除してハッシュを保存するだけです。これは、数百人または数千人のユーザーにとってはうまく機能するように思えますが、これが本当に最善の方法でしょうか?
誰かがすでにこの問題に取り組み、解決策をリリースしていますか?
考慮すべきことの 1 つは、私のキャッシングのほとんどすべてが、現在、次のように、まだ起動されていない ActiveRelations で準備されたクエリを対象とした、ビュー内のステートメントで行われていることです。
このサイトは Heroku でホストされており、dalli gem をクライアントとして使用しています。
ruby-on-rails - Touch を使用したフラグメント キャッシング
現在、オブジェクト キーでフラグメント キャッシュを使用しています。そして、タッチを使用してキャッシュを期限切れにし、updated_at 列を更新すると、現在のキャッシュが廃止されます。そして、次回は新しいキャッシュが生成されます。
オブジェクトのキャッシュキーは次のようになります
今、私は自分の製品を別の場所にキャッシュしたいと考えています。そうするために、以前と同じことをしたいのですが、オブジェクトにキャッシュオプションを与えるだけですが、それはできません:(
このようなキーを生成して、Touch でキャッシュの有効期限が切れたままにしておくことができれば素晴らしいことです。
残念ながらこれは不可能です。誰かが私の問題を解決する方法を知っていますか?
グレッグ
drupal - すべてのページにセッション固有のデータを含むDrupalサイトをキャッシュする
Drupal6で書かれたサイトがあります。
Drupalのキャッシュメカニズムを使用してパフォーマンスを向上させたいのですが、オンにすると、サイトのすべてのページにセッションデータが表示されるため、問題が見つかりました。Drupalのキャッシングシステムは静的コンテンツページに対してのみ機能し、セッションデータは事実上どのページも静的ではないことを意味します。
これに対する2つの解決策を考え出しました。
Ajaxを使用して非静的データをロードするようにセッションデータを表示するブロックを書き直して、メインのHTMLコンテンツが静的になるようにします。これの欠点は、かなりの作業を意味することと、Javascriptに対応していないユーザーや特殊なブラウザ(スクリーンリーダーなど)の機能が低下することです。
セッションデータを
iframe
または同様のものに移動します。これは間違っているように聞こえ、私はそれをしたくありませんが、それは問題を解決すると思います。または、すべてのページに動的データの小さなブロックがあることに対処できる方法でサイトをキャッシュできる代替のキャッシュシステムを見つけます。これは私たちが好むオプションですが、何も見つけることができていないので、ここで質問します。
したがって、オプション3で役立つ提案があれば、お知らせください。ありがとうございました。
(ps-Drupal 7には、これに役立つ可能性のある改善されたキャッシングシステムがあることは知っていますが、まだD7に移行する準備ができていません)
[編集]これについてはあまり進歩していないので、私はそれを賞金に開放します。
Ubercartが同様の状況にどのように対処するかを調べました(これは最も人気のあるDrupalモジュールの1つであり、基本的に私たちと同じ問題を解決する必要があるためです)。ユーザーがログインしていないときにカート情報ブロックに静的テキストを表示させ(つまり、「バスケットを表示するにはここをクリック」)、ユーザーがログインしているときにすべてのページに動的カートデータのみを表示することで回避します。これが実際に問題を解決するとは思わないでください。それはそれを回避するだけであり、それは私たちが望んでいることではありません。しかし、Ubercartがこの方法でそれを行うことに頼った場合、それが唯一の選択肢であることが判明するかもしれないのではないかと心配しています。
javascript - Javascriptを使用したフラグメントキャッシング
javascriptを使用してページの動的部分をロードしながらキャッシュを実行するための最良の方法に関するサンプルコードを誰かに教えてもらえますか?
私の標準的な例には、ページの上部にあるユーザーのログインステータスとユーザー名以外は何も変更されないページが含まれます。jQueryとajaxリクエストを使用してこのテキストを変更するのは簡単ですが、私が行っているので、$(document).ready()
すばやく見ると、ajaxリクエストが発生して更新する前に、「ここをクリックしてログイン」のようなページの読み込みを確認できます。ページのセクション。
明確にするために編集:
ページ全体をキャッシュすると、次のようになります。
- ユーザーAがページをリクエストします
- ページはキャッシュされないため、アプリケーションは右上隅に「HiUserA」を含むhtmlを生成します
- ユーザーBがページをリクエスト
- ページはキャッシュされているので、アプリケーションはそのまま提供します-「HiUserA」ビットを含む<-これは動的に更新したい部分です。
理想的には、ステップ2で、ページは「Hi User A」ビットなしでキャッシュされるので、誰かがページを要求したときに、挨拶を取得するための単純なajax要求を行い、それをdomに押し込みます。
javascriptが進むべき道だと思いますが$(document).ready()
、ページがより自然にレンダリングされるように待つよりも良い方法が必要だと思います。
それが重要な場合(静的htmlに適用されるソリューションは私が行っていることでも機能するため、そうすべきではないと思いますが)、私はrails2.3.xとjQueryを使用しています。
caching - Rails 3: スイーパーがフラグメントを破棄せず、キャッシングが無効になっていると考える
スイーパーでフラグメントを期限切れにしたい。スイーパー コールバックは実行されますが、expire_fragment への呼び出しは何もしません。nil を返します。キャッシングが構成され、フラグメントが作成され、テンプレートで使用されています (ログで確認しました)。私は何を間違っていますか?
アプリケーション.rb
production.rb
オークション_スイーパー.rb
ログ ファイルでは、cache_configured? は nil であり、perform_caching と cache_store も同様です。
したがって、expire_fragment のコードが読み取られるため、フラグメントの有効期限が切れていないと思います。
ファイルactionpack/lib/action_controller/caching/fragments.rb、87行目
ruby-on-rails - Rails でフラグメント キャッシングを行うとリンクが壊れる
投稿、コメント、およびコメントできるユーザーを含むブログがあるとします。ユーザーは、 http://localhost:3000/users/johnなどの SEO に適した URL を持っています(これは、permalink_fu を使用して簡単に行うことができます)。
このモデルはタッチを使用してキャッシングを簡素化します。
ビューのコードは次のようになります。
ここで、John がニックネームを Johnny に変更するとします。彼の URL はhttp://localhost:3000/users/johnnyに変更されます。投稿とコメントでフラグメント キャッシュを行うため、フラグメントの有効期限が切れていない限り、John のコメントは John の間違った URL を指します。この例では、John によるコメントを含むすべての投稿を手動でタッチまたは期限切れにすることができますが、複雑なアプリケーションでは非常に複雑なクエリが必要になり、エラーが発生しやすくなります。
ここでのベストプラクティスは何ですか? /users/john の代わりに /users/13 のような非 SEO フレンドリーな URL を使用する必要がありますか? それとも、キャッシュの有効期限が切れるまで、古い URL のリストを保持しますか? 私には良い解決策はありません。
編集: これは単純化された例に過ぎないことに注意してください。この場合、投稿を照会してそれらに触れるのは非常に簡単です。しかし、複雑なアプリはオブジェクト間に多くの関係があることを意味するため、ユーザーへの参照を持つすべてのオブジェクトを追跡することは困難です。これについて少し調べてみました -- Facebook ではユーザー名を 1 回しか設定できないため、この問題は存在しません。
asp.net - ASP.Netでのページキャッシュの問題
ASP.Net Webサイトのホームページでページ出力キャッシュを使用して、読み込みを高速化しています。キャッシュ時間は非常に短い(5分)ため、データの更新は短時間でユーザーに反映されます。ホームページ自体には、表示された質問のベストアンサーに投票するために使用される「投票」というセクションがあります。このセクションでは、ユーザーがすでに投票した場合に投票結果が表示され、投票していないユーザーの場合は、投票の質問を表示する必要があります。問題は、すでに投票したユーザーがホームページにアクセスしたときに、投票結果が表示された状態でページがキャッシュされることです。その5分のキャッシュ時間内に、まだ投票していない別のユーザーがそのページにアクセスすると、そのユーザーの結果も投票の質問の代わりに表示されるため、ユーザーはその投票に投票できません。
これを防ぐために、ホームページのすべてのセクションのデータテーブルをキャッシュしてページをレンダリングするデータキャッシュ手法を試しました。この手法はまだページ出力キャッシュほど高速ではないため、ユーザーはこの手法を望んでいません。両方のデータキャッシングのロード時間は、ページ出力キャッシングと比較するとはるかに長くなります。
また、ページ全体がキャッシュされた場合でも、ページの一部だけがリロードされる置換キャッシュ方式を試しました。このキャッシュ方法で最も重要な問題は、その置換コントロールで使用できるのはHTMLコントロールのみであるということです。HTMLコントロールのみを使用して投票セクションを作成しようとしましたが、ページの他のセクションで使用されているAJAX更新パネルで問題が発生します。
この問題を解決するために私を案内してください。ページの一部(ポーリングセクション)だけをユーザーごとにリロードする必要があり、他のセクションはキャッシュから配信する必要があります。これは、ページのパフォーマンスを損なうことなく発生するはずです。
ruby-on-rails - Rails のフラグメント キャッシングはこの問題に適していますか?
Rails のキャッシング システムについてはまだ理解していませんが、フラグメント キャッシングと呼ばれる機能のガイド セクションを読みました。
私の問題は次のとおりです。私のビューは主に静的要素で構成されています。これはほぼ完全に静的であり、変更されるのはフォーム内のステータス メッセージと非表示の入力フィールドだけです。両方とも、ビューを提供するアクションへのリクエストごとに生成されます。
フラグメント キャッシュはこの問題に適していますか? どのキャッシュ戦略を使用する必要がありますか?
ruby-on-rails - Rails を使用して定期的に集計データを再計算しないようにするにはどうすればよいですか?
スタック オーバーフロー プロファイル ページと同様のユーザー統計 (合計アクセス数、バッジ数など) を含むサイドバーがあるユーザー プロファイル ページがあります。
問題は、現在、データベースにアクセスして、すべてのリクエストでこれらの統計を計算していることです。これを削減するためにフラグメント キャッシングを実装できますが、この種のことを処理するためのより良い方法はありますか?
集計された要約データをデータベースに保存すると、問題 (つまり、不整合) が発生する可能性があるようです。
ruby-on-rails - Rails 3.1ワイルドカードは、クエリ文字列を使用したアクションのキャッシュを期限切れにします
index
カスタムソート列、ページネーションなどを使用して、アクションが投稿のリストを表示するページがあります。個々のページ/ソートオプションをすべてキャッシュできますが
1回の呼び出しでこれらすべてを一度に期限切れにすることはできませんexpire_action
(これは問題です)。正規表現オプションがあることは知っexpire_action
ていますが、それは面倒です(正規表現を使用してハッシュで作成されたキーを検索します)、機能しないmemcachedを使用しています。
への 1 回の呼び出しで、アクションのすべてのキャッシュ メンバーを期限切れにするにはどうすればよいexpire_action
ですか? これが不可能な場合、他に推奨できるキャッシュ オプションはありますか?