1

最終的には数か月後に検討する必要があるいくつかのシナリオがあります。それまでの間、議論について熟考できるように、そこに質問を投げかけます。

アプリケーション スタックに Zend Framework を使用しています。サーバーキャッシングにAPCを使用しています(アプリケーションが分散されていても、memcacheが私に利益をもたらすとは思わないため、memcacheではなく)。

私のアプリケーションは JavaScript なしで動作するように構築されており、JavaScript をサポートするために、ページを分割して JavaScript 対応バージョンをレンダリングします。

単純なページを分析すると、おそらくその 80% がコア機能であり、すべてのユーザーに対してキャッシュできます。次に、その 20% がそのユーザー向けにカスタマイズされます。たとえば、表示したい場合があります

  • 最近閲覧した 5 件のアイテム
  • お気に入りのアイテム

これら 2 つの「ウィジェット」は、各ユーザーに固有のものです。これらのコンポーネントに ESI を使用することを検討していましたが、Zend Framework アプリケーションで最も消費量が多いのはブートストラップとディスパッチ プロセスであることに気付きました。したがって、私のアプリケーションがキャッシュなしで現在 80 ミリ秒かかるとします。相対時間の 90% がブートストラップとプラグイン フックで費やされているように、ESI を使用してこれら 2 つの「ウィジェット」をロードすると、各ページに効果的に負荷がかかることになります。キャッシュされたページごとに別の 80 ミリ秒のリクエストを開始するためです。

その場合、カスタマイズされたウィジェット/スニペットを JavaScript 経由でロードすることをお勧めします。これは、最初のページがロードされた後に取得できます。これの明らかな利点は、キャッシュされるリクエストは常に 1 つだけであり、最初のページ (キャッシュされる) が提供された後、カスタマイズされたものはすべて 1 つのリクエストでプルされることです。

最大のパフォーマンスを探している場合、これはより良い解決策のように思えますか?

4

2 に答える 2

1

ajax呼び出しに基づいてキャッシュから読み取り、情報がキャッシュされていない場合にのみブートストラップする2番目のシンプルなアプリを構築できます。その後、応答をキャッシュに追加して、それ以上の呼び出しでzendプロジェクトが読み込まれないようにすることができます。これは通常の手順ですが、キャッシュの無効化もプログラムする必要があります。これに適したapcをすでに使用しています。明らかに、最後に表示された5つのコンテンツまたは同様のコンテンツでは機能しません。

于 2012-11-07T04:22:43.700 に答える
0

ESI を使用したワニスは、80 ミリ秒で十分であることを知っているため、ページの読み込み時間を短縮するのに役立ちません (人間のユーザーは 1 ミリ秒と 500 ミリ秒の間に違いはありません...)。

高負荷時のサーバー ストレスを回避するのに役立ち、AJAX と同様に ESI でも機能します。

メイン ページをできるだけ速く表示することが優先される場合は、ESI がサブ要求の応答を待ってからページ全体を送信するため、AJAX が最適です。

それでもアプリを非 JS 互換にしたい場合は、フィルター ユーザー エージェントをフィルタリングして、可能であれば JS を使用し、そうでない場合は ESI を使用できますが、この種のトリックは簡単に汚れます...

于 2011-12-01T17:47:36.593 に答える