我应该检查一下';未修改';对于大多数响应


Should I check if 'is not modified' for most responses?

我对这个片段很感兴趣:

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

我应该尽可能这样做吗?我认为我的网站中的大多数页面都可以通过这种方式节省带宽(尽管不是CPU)。

在我看来,仅仅为了节省带宽而盲目地这样做是浪费时间和不必要的代码复杂化。

您的缓存策略非常重要,必须在整个应用程序上明智地实施,根据控制器的操作使用各种缓存技术。

  • 对于静态页面,我建议使用没有Etag的缓存过期,但更多使用Expires Header或缓存控制Header

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

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

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