0

私はPHPキャッシングを理解しています.ページ全体をキャッシュして、その後のアクセスなどのパフォーマンスを向上させます.

私が得ていないのは、ページに折りたたみ可能な固定メニューがある場合、これをどのように行うかです。そのため、サイトには折りたたむことができる固定のトップ メニューがあり、その状態は Cookie で記憶されます。ページがキャッシュされている場合、折りたたまれたトップ メニューの実際の状態は間違いなく無視されます。

たぶん、トップメニューは行くべきですが、どうにか回避できると思います。PHP はロード時にトップ メニューのステータスを決定し (Cookie を検出)、JS はトップ メニュー (および Cookie) のステータスを変更することもできます。

また、サイトはレスポンシブで、ユーザー エージェントの検出により、jQuery 機能を提供するデバイスが決定されます (その他のデバイスは基本的なフォールバックを取得します)。

明らかに、ページ全体をキャッシュすることはできません。

それが違いを生む場合、私はSymfony2を使用しています。

4

1 に答える 1

1

キャッシュに関しては多くのオプションがあり、すべてに長所と短所があります。

  • ESI: あなたが言及したコメントでは、ESI について知っており、ページの一部のみをレンダリングするために使用できます。あなたの場合、メニューのレンダリングのみ(折りたたまれているか、Cookieに基づいていない)がオプションになる可能性があります
    • Javascript: JS のみで全体の折りたたみを実装し、常に HTML コードをメニューと共に配信する場合、ページ全体をキャッシュしてから、クライアントにそれを折りたたむかどうかをレンダリングさせることができます。サーバー側のコードを節約し、Web サーバーとクライアント ブラウザーの両方のキャッシュを簡単にし、リロードせずにメニューを折りたたむこともできます。
    • ETag: これは最も複雑なオプションですが、確かに利点があります。Cookie の状態を含むハッシュを使用して ETag を作成できます。そうすることで、ブラウザーは最後の ETag に何か変更があったかどうかを尋ね、ユーザーは特定の Cookie 属性 (折りたたまれた状態など) に基づいて ETag を生成します。変更された場合、ETag が一致せず、「新しい」ページが返されます。何も変更されていない場合は、キャッシュされたバージョンが使用されます。symfony のドキュメントで ETag について読むことができます。
    • キャッシング レイヤー: もちろん、さまざまなリバース キャッシング プロキシを見ることができます。それらはキャッシングのさまざまな方法をサポートしており、問題を処理できるものがあるかもしれません。

レスポンシブ サイトについて: フォールバックなどを javascript で実装するのがよいでしょう。そうすれば、クライアントがすべての作業を行い、サーバーはより静的なページをサーバーに提供でき、非常に適切にキャッシュできます。

動的ページとキャッシングは互いに排除していることに注意する必要があります。Cookie 属性、ユーザー エージェント、おそらく IP アドレスなどに基づいて異なるコンテンツを使用すると、キャッシングで問題が発生します。ページが静的であるほど (また、静的ページを提供し、javascript を使用してすべてのダイナミクスを追加する場合、ページは Web サーバーの観点から静的です)、より適切なキャッシュが機能します。これはトレードオフであり、おそらくすべてを取得できるわけではありません (高いキャッシュ ヒット率と非常に動的なページ)。

于 2013-05-05T13:34:33.913 に答える