2013-04-10 4 views
0

Я работаю на веб-сайте 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?

ответ

2

ESI не похоже на работу с кэшем проверки, но только с кешем истечения срока действия. Обратите внимание, что я тестировал в 2.0.23, возможно, проблема решена в более поздних версиях.

With Symfony2 why are ESI tags inside cached responses ignored?