キャッシュする適切な情報は何ですか?ページの読み込みに適した時間はどれくらいですか?

StackOverflow https://stackoverflow.com/questions/218801

質問

ソーシャルネットワークサイトの開発中です。

また、プロジェクトの初日からスケーラビリティについて考えていたので、サイトとクエリを自分の能力を最大限に引き出すように微調整しました。

ただし、特定のページは非常にデータ量が多く、可能な限り高速にロードするかどうかはよく分からないので、分散キャッシュソリューションの実装を考えていました。

しかし、キャッシュすべきではなくキャッシュすべきものがよくわかりません。または、現在のページの読み込み時間が1秒である場合は良いか悪いか

最も重いクエリは、メンバー情報を取得します。このクエリは、すべてのメンバーの情報と、このサイトの場合の目標、ブログタイプエントリ、励まし、写真、ステータス更新(twitterなど)、ブログ情報(エントリーをクロスポストするなど)

とにかく、この情報をキャッシュする必要がありますか?また、1秒のページ読み込み時間はかなり速いと思いますか?一部のページは、4〜6秒の10分の1秒未満です。

役に立ちましたか?

解決

可能な限り、アプリケーションのすべてのレイヤーでキャッシュを実装します。

ページを最高レベルで、オブジェクトをコードレベルでキャッシュし、データベースがクエリとキーデータの両方を最低レベルで正しくキャッシュするようにします。

何をキャッシュする必要があるかという点では、繰り返しアクセスされるオブジェクト、特に頻繁に変更される可能性が低いオブジェクトをキャッシュする必要があります。その後、そのオブジェクトのキャッシュは、編集されたときにのみリセットできます。 (ほとんどすべてのロードでキャッシュを置き換える一定のサイクルとして、頻繁に更新されるオブジェクトをキャッシュすることに注意してください。キャッシュを強化するのではなく、パフォーマンスを低下させます)

パフォーマンスを測定するために、1ページの読み込みにかかる時間は調べませんが、各ページがプレッシャーの下でどれだけ速く実行されるかを本当にテストする必要があるため、いくつかのパフォーマンス測定ツールを探します。たとえば、めったにアクセスされない場合、ユーザー情報ページは最大のキャッシュターゲットではない可能性があります。最も頻繁に使用されるページに集中する必要があります。

他のヒント

典型的な答えは:

  • めったに更新されないキャッシュ情報。
  • 頻繁に変更されるものをキャッシュしないでください。

あなたの場合、すべてをフラットファイル(たとえば、ユーザーごとに1ファイル)にキャッシュし、対応するものによって何かが更新されるたびにユーザーキャッシュファイルを破棄できます。キャッシュファイルが存在しない場合は、関連するコンテンツを表示する前にキャッシュファイルを作成します。

ロード時間については(ユーザーの場所によって大きく異なる可能性があります)、ゲームサイトのPHPフォーラムの参考数値を次に示します。

  • JSロード時間:0.274
  • クエリ数:15
  • PHPロード時間:0.0524
  • メモリ使用量:1.013 MB

そして、これはコミュニティによって良い経験と見なされています。しかし、それは非常に主観的です。

ページの読み込みに関する質問はすでに尋ねられています:

動的な、パーソナライズされたWebアプリケーションの適切な応答時間とは何ですか?

キャッシングに関しては、キャッシュからのロードとデータのロードのたびに費やされる時間を測定する必要があります。キャッシュが大きいほど、効果は低くなります。したがって、キャッシュに大量のデータをロードしたくありません。ここで使用しているのはローリングキャッシュで、キャッシュサイズの制限に達すると、使用頻度が最も低いデータがドロップされます。次に、実際のパフォーマンス結果に応じて制限を調整します。

ユーザープロファイル固有のデータについては、できる限りFormsAuthチケット/ Cookieに保存します。キャッシュ(HttpContext.Current.Cache)ユーザー固有のアイテムは、セッションと同じように(ただし頭痛の少ない)ユーザーごとにサーバー上にXリソースを必要とします。ユーザーのチケットまたはCookie(4Kなど)に可能な限りオフロードできる場合は、スケーリング中のサーバーのパフォーマンスが本当に向上します。

ページに必要な情報の一部のみを取得する必要があります。たとえば、ブログデータをロードする場合、DONTは写真をロードします。はい、それ以上の作業が必要ですが、スケーリングする場合は各ページのニーズを分析する必要があります。

データベースクエリキャッシング(実行プランの再利用)、オブジェクトキャッシング(Httpcontext.Cache)、およびページキャッシング(Response.Headers [Expires])の違いを理解してください。

Webデザインの第一人者 Vincent Flanders は、4秒を超えるとWebページを読み込むには長すぎることを示唆しています。これはかなり良い経験則だと思います。

キャッシュまたはその他のパフォーマンスの最適化に関する限り、パフォーマンステストを実行することをお勧めします。市場には多くのパフォーマンステストキットがあります。テストを行うと、問題のある場所がわかります。既にうまく機能しているものにキャッシュロジックを追加しても意味がありません。一方で、予期しない場所でパフォーマンスの問題が発生する可能性があります。これには、キャッシュを考慮していないデータが含まれます。

パフォーマンステストで発見したことは、コード内でデッドロックが発生している箇所、または単純なデータベース最適化が役立つ箇所を見つけることができるということです。おそらく、テーブルにインデックスを追加すると、多くのキャッシュロジックを追加する代わりに、ページが高速化されます。

シンプルに保ち、必要な場合にのみパフォーマンスをリファクタリングします。

また、早期にテストし、頻繁にテストします。多くの人がパフォーマンスを最後に検討するように言っていることは知っていますが、少なくとも開発ライフサイクルの早い段階でパフォーマンスの検討を開始しなければ、実際に自分自身をコーナーにコーディングできます。

一部の研究では、対話型アプリケーションが250ms以内にフィードバックを提供して、ユーザーがスタックしたり操作が失敗したとユーザーに思わせたりしないようにする必要があることが示唆されています。ただし、Webでの受け入れレベルはいくぶん高く、通常、新しいページが読み込まれているというフィードバックがWebブラウザーから提供されます。 AJAXでは、ブラウザが何が起きているかを表示しないため、SOMのようなフィードバックを提供するように注意する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top