我想知道是否存在类似私有(private) ESI 片段的东西。在 the docs 我读到:
我不完全了解我是否能够基于每个用户缓存我页面的某些部分。有人可以解释一下吗?
提前致谢!
最佳答案
您可以基于每个用户缓存页面的某些部分。
他们的关键是清漆配置,你为你的 ttl 设置共享最大年龄,并且
然后将为该用户缓存该 esi 请求。
那就看看这个Varnish cookbook caching for logged in users的key
是您需要一个带有散列用户 ID 的唯一 cookie,并将示例中的 myapp_unique_user_id
替换为您的 cookie 名称。
这是一个示例 Controller ,其中包含缓存和非缓存操作。
<?php
namespace MyTest\Bundle\HomepageBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class TestController extends Controller
{
/**
* UnCached html content
*
* @Route("/test_cache", name="homepage")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function homepageAction()
{
return $this->render('MyTestHomepageBundle::index.html.twig');
}
/**
* Cached user specific content
*
* @param integer $myTestUserId
*
* @return \Symfony\Component\HttpFoundation\Response
*
* @Route("/test_user_cached/{myTestUserId}", name="homepage_user_specific_content")
*/
public function userSpecificContentAction($myTestUserId)
{
$response = $this->render('MyTestHomepageBundle::userSpecificContent.html.twig', array('userId' => $myTestUserId));
$response->setPublic();
$response->setSharedMaxAge(3600);
return $response;
}
}
这是你的 index.html
<!DOCTYPE html>
<head></head>
<body>
<h1>My Test homepage - {{ "now"|date("F jS \\a\\t g:i:s") }}</h1>
{{ render_esi(url('homepage_user_specific_content')) }}
</body>
和 userSpecificContent.html.twig
UserId: {{ userId }} - {{ "now"|date("F jS \\a\\t g:i:s") }}
关于caching - Symfony2 : Private ESI Fragment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17926367/