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, которую я использовал для статьи в блоге?
Спасибо
РЕДАКТИРОВАТЬ:
ESI, похоже, не работает с кэшем проверки...
Смотрите здесь: С Symfony2 почему теги ESI внутри кэшированных ответов игнорируются?
1 ответ
Похоже, что ESI не работает с кэшем проверки, а только с кэшем срока действия. Обратите внимание, что я тестировал в 2.0.23, возможно, проблема решена в более поздних версиях.
С Symfony2 почему теги ESI внутри кэшированных ответов игнорируются?