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 HeaderCache-control Header

  • 对于动态页面,我建议在这里使用更多验证的缓存,然后使用 Etag 的 Last-modified

  • 最后,对于许多情况(在我的情况下,静态页面具有大量共享缓存,但顶部的顶栏包含我无法缓存的登录用户的个人信息),我建议使用ESI来分别缓存页面的不同块(在我的情况下,topbar 从未缓存过,页面的其余部分使用验证和 ETag 进行缓存)

这样,通过更多的反思和全局策略,您可以在应用程序之上定义一个可靠且高效的缓存,从而节省您的带宽和CPU

于 2012-08-19T12:26:16.777 回答