Вот мое усилие объяснить разницу между ними.
Для начала давайте посмотрим на Zend_Cache_Frontend_Capture . Ссылка утверждает, что этот класс предназначен для работы только с Zend_Cache_Backend_Static
.
Вы бы использовали Zend_Cache_Frontend_Capture
для кэширования целых страниц, которые не имеют отношения к пользователю, получающему доступ к сайту. Этот интерфейс используется, когда у вас есть статические данные (которые могут время от времени изменяться), которые не имеют отношения к текущему пользователю, то есть они одинаковы для всех пользователей (например, RSS-канал или динамически создаваемый файл JavaScript).
Глядя дальше на Zend_Cache_Backend_Static , вы увидите, что этот бэкэнд немного особенный. Для работы с кешем требуются правила в вашем файле .htaccess
. После того как вы что-то кэшировали с Frontend_Capture/Backend_Static
, PHP и Zend Framework НЕ используются для обслуживания кэшированных данных. Apache видит, что файл кеша существует на основе вашего .htaccess и передает содержимое напрямую пользователю, не вызывая PHP.
Zend_Cache_Frontend_Page
с другой стороны работает по-другому. С его помощью вы можете кэшировать контент не только на основе URI запроса, но и на основе информации в параметрах cookie, сеанса, GET или POST. По умолчанию кэширование на основе файлов cookie, сеанса, получения и публикации отключено, поэтому для того, чтобы это могло повлиять на пользователя, вошедшего на ваш сайт, вы должны сообщить кешу, есть ли какие-либо страницы, которые вы хотите кэшировать на основе этого информация.
Как только я создаю кеш и сообщаю ему, что я хочу кешировать на основе куки и сессии, теперь я могу кешировать динамически генерируемую страницу, специфичную для одного пользователя. Таким образом, если человек А получает доступ к /accounts/
, страница может быть кэширована для этого конкретного пользователя, содержащая список его учетных записей, которые были извлечены из базы данных. Теперь, когда человек B получает доступ к /accounts/
, он не видит кэш для человека A, поэтому страница теперь кешируется для него отдельно с информацией о каждом соответствующем пользователе в их собственном кеше.
В сумме:
Используйте интерфейс Capture, если у вас есть данные, которые вы можете кэшировать, это то же самое для ВСЕХ пользователей. Это будет кэш с более высокой производительностью, поскольку PHP и ZF не нужны после кэширования страницы. Недостатком является добавление правил кэширования в .htaccess
Используйте внешний интерфейс страницы, если вы хотите кэшировать страницы с динамическим выводом, основанным не только на URI запроса, но и на файлах cookie, данных сеанса или параметрах get / post.
Надеюсь, что это ясно и поможет вам понять различия.
EDIT:
Мне кажется, я вижу, в чем проблема, не уверен, классифицируется ли это как ошибка или нет.
Zend_Controller_Action_Helper_Cache::preDispatch()
генерирует идентификатор кэша на основе URI запроса (который включает строку запроса). Поскольку тикер jQuery добавляет строку запроса к URL-адресу, вы кэшируете одну копию канала для каждого URI запроса. (Ищите $ reqUri в вышеупомянутом методе класса).
Я вижу несколько вариантов: 1) посмотреть, можно ли заставить тикер не добавлять строку запроса (по крайней мере для этого конкретного URL) или 2) вручную запустить кэш захвата и передать свой собственный идентификатор, вместо того, чтобы помощник кеша сгенерировал его на основе URI запроса.