Symfony 1.4: Как настроить кэширование при работе с ajax-запросами? - PullRequest
0 голосов
/ 10 марта 2011

У меня есть некоторые действия, которые должны использоваться в запросах ajax.

Если я просматриваю страницу в браузере, ответ кэшируется, как и должно быть.Тем не менее, в запросах ajax это не так.

Метод запроса - GET и без параметров GET.

sfViewCacheManager даже не вызывает isXMLHttpRequest (), поэтому довольно сложно понять, почему это не работает...

Есть ли где-нибудь настройка для включения кэшированных запросов ajax?

Ответы [ 3 ]

1 голос
/ 05 апреля 2012

При кэшировании ответов автозаполнения jQuery мне помогло следующее:

  • Удалить дополнительный параметр метки времени из сценария jQuery

    заменить:

    var extraParams = {
      timestamp: +new Date()
    };
    

    по:

    var extraParams = {};
    
  • Включить кеш в cache.yml с макетом. Без макета вроде бы не получилось:

    loginFacility:
      enabled:     true
      with_layout: true
      lifetime:    86400
    
  • Удалите заголовок Pragma в действии, поскольку для него автоматически было установлено значение no-cache:

    $this->getResponse()->setHttpHeader("Pragma", "");
    

Мое действие теперь выглядит так:

public function executeLoginFacility(sfWebRequest $request)
{
  $this->getResponse()->setContentType('application/json');
  $this->getResponse()->setHttpHeader("Pragma", "");
  $facilities =  Doctrine_Core::getTable('Facility')->findLoginFacilitiesForAutocomplete(
        $request->getParameter('q'),
        $limit);

  return $this->renderText(json_encode($facilities));
}

Теперь, когда выполняется много автозаполнений, ответы кэшируются Symfony, а firefox извлекает их из своего собственного кэша. По крайней мере, так это выглядит в Firebug.

Я обнаружил, что добавление шаблона в микс вместо возврата пролива из действия привело к увеличению размера кэшированного файла в кэше Symfony. Я не мог видеть выгоду.

0 голосов
/ 10 декабря 2011

Symfony всегда отключает кэш, когда POST или GET или другие заголовки HTTP отправляются со страницей.

Таким образом, ваш AJAX-запрос не кэшируется, поскольку вы отправляете GET параметров на страницу, которую хотите кэшировать.

Лучший способ проверить это: добавить GET параметров и просмотреть страницу «в браузере», как вы сказали, и вы увидите, что Cache не будет работать.

Так что отключите POST и GET или другой заголовок PUT DEL из вызова Ajax и кеш будет работать нормально.

Для отключения Get / Post: http://www.panteo.net/article/en/1/developpement-symfony-php/cache-symfony-and-appels-ajax.html

0 голосов
/ 11 марта 2011

Это не на 100% идеально, но я нашел решение для этого.Кажется, что кэширование работает только по умолчанию, когда вы используете шаблон.Я отвечал через return $this->responseText($json);.

Ответ с использованием минимального PHP-шаблона запустил кеширование.

#jsonSuccess.php
<?php echo $json ?>

Было бы полезно узнать, есть ли способ заставить responseText вызвать кешированиемеханизм, так как он будет немного быстрее, чем через шаблон.

Довольно забавно, что кеширование теперь работает даже при использовании параметров запроса GET.Я думаю, что это могло быть что-то, что они включили в Symfony 1.3 / 1.4.

Для того, чтобы сказать, что было кэшировано, я добавил заголовок «create_at» к ответу при просмотре в режиме отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...