Я работаю на веб-сайте symfony2, где мне нужно несколько кеш-страниц, но некоторые части должны оставаться недоступными (например, меню пользователя и т. Д.). Я проверил документацию, и ESI, похоже, построена именно для этого.Symfony2 ESI-кеширование + Последнее изменение
Я начал внедрять кэширование в своем проекте для своей статьи в блоге. Я установил проверку кеша с последним измененным и Etag, как это предлагается в документах Symfony2.
У меня есть меню пользователя в заголовке всех моих страниц. Он работает с ESI, и я уверен, что он не кэширует. Насколько я вижу, это не работает. Вся моя страница статьи блога кэшируется полностью каждый раз вместе с пользовательским меню. Он сохраняется в кеше браузера и обновляется только после фактического обновления статьи в блоге (это верно).
Вот мой код контроллера блог статьи:
public function showAction($slug)
{
$response = new Response();
$response->setETag(md5($response->getContent()));
$date = $article->getModifiedAt();
$response->setLastModified($date);
$response->setPublic();
$response->headers->addCacheControlDirective('must-revalidate', true);
// Check that the Response is not modified for the given Request
if ($response->isNotModified($this->getRequest())) {
// return the 304 Response immediately
return $response;
} else {
//do stuff
return $this->render('NewsBundle:News:show.html.twig', array(
'article' => $article,
),$response);
}
Мой контроллер Меню пользователя:
public function userMenuAction()
{
$response = new Response();
$response->setSharedMaxAge(0);
return $this->render('MainBundle:Views:userMenu.html.twig', array(
'user' => $user,
),$response);
}
MY ESI маршрутизации
ESI_userMenu:
pattern: user-menu
defaults: { _locale: en, _controller: MainBundle:Default:userMenu }
ESI визуализации:
{% render url('ESI_userMenu') with {}, {'standalone': true} %}
Когда я загружаю страницу своей статьи в блоге, я заметил, что меню пользователя также кэшируется. Я тестировал больше и выяснил, не использую ли я «isNotModified», но вместо этого установил срок годности, ESI действительно работает.
Есть ли способ заставить ESI работать с структурой «isNotModified», которую я использовал для статьи в блоге?
Благодаря
EDIT:
ESI не кажется, что для работы с кэшем проверки ...
Смотрите здесь: With Symfony2 why are ESI tags inside cached responses ignored?