6

私はこのスニペットに興味を持っています:

public function indexAction()
{
    $response = $this->render('MyBundle:Main:index.html.twig');
    $response->setETag(md5($response->getContent()));
    $response->isNotModified($this->getRequest());

    return $response;
}

可能な限りこれを行う必要がありますか?私のウェブサイトのほとんどのページは、この方法で帯域幅を節約できると思います(CPUではありませんが)。

4

1 に答える 1

5

帯域幅を節約するためだけにやみくもにこれを行うことは、私の意見では時間の無駄であり、不要なコードの複雑化です。

キャッシュ戦略は非常に重要であり、コントローラーの動作に応じてさまざまなキャッシュ手法を使用して、アプリケーション全体に賢明に実装する必要があります。

  • 静的ページの場合、Etag なしでキャッシュ有効期限を使用することをお勧めしますが、Expires ヘッダーまたはキャッシュ制御ヘッダーを使用することをお勧めします。

  • 動的なページの場合は、キャッシュを使用してより多くの検証を行ってから、Last-modified の Etag を使用することをお勧めします。

  • 最後に、多くの場合 (私の場合、大量の共有キャッシュを使用する静的ページですが、キャッシュできないログイン ユーザーに関する個人情報がトップバーに表示されます)、ESIを使用してページのさまざまなブロックを個別にキャッシュすることをお勧めします。 (私の場合、トップバーはキャッシュされず、残りのページは検証と ETag でキャッシュされました)

このように、もう少し反射的でグローバルな戦略を使用して、帯域幅と CPU の両方を節約する信頼性の高い効率的なキャッシングをアプリケーションの上に定義します。

于 2012-08-19T12:26:16.777 に答える