Как мне использовать Zend Cache для решения этой конкретной проблемы? - PullRequest
2 голосов
/ 30 мая 2010

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

class IndexController extends Zend_Controller_Action
{
    ....
        public function indexAction()
            {

                $auth = Zend_Auth::getInstance();
                if($auth->hasIdentity())
                {
                    $this->render('indexregistered');
                    return; 
                }
                else {
                    $this->render('indexpublic');
                    return;
            }   
    }   
    ....    
} 

Я видел довольно много полезных примеров использования Zend Cache, и они, похоже, основаны на том факте, что действие отображает один конкретный скрипт.

То, на что я действительно обращаю внимание, - это лучший способ кэширования сценария indexpublic , который получает довольно много хитов, и я действительно хотел бы избежать накладных расходов Zend MVC, если это возможно.

Ответы [ 2 ]

2 голосов
/ 30 мая 2010

Вы вряд ли будете "избегать накладных расходов MVC" здесь каким-либо значимым образом, так как эта инфраструктура MVC - это именно тот контекст, в котором живет Zend_Cache. Как только вы находитесь внутри действия контроллера, вы уже использовали кучу ресурсов для маршрутизации и настройки.

Тем не менее, если внутри indexpublic.phtml происходят дорогостоящие вещи, вы можете использовать Zend_Cache_Frontend_Output внутри вашего шаблона для кеширования множества вещей. Если indexpublic запускает дорогостоящие операции (например, обращения к БД), это может быть оправдано. Если разметка генерируется только на чистом PHP, вряд ли вы заметите значительное улучшение.

Прежде чем что-то делать, я бы посоветовал вам внимательно изучить поведение приложения и убедиться, что вы оптимизируете его в нужном месте, а не преждевременно.

2 голосов
/ 30 мая 2010

Zend_Cache_Frontend_Output может быть то, что вам нужно здесь:

if (!($cache->start('indexpublic'))) {
    // output everything as usual
    $this->render('indexpublic');
    $cache->end(); // output buffering ends   
}

Перед этим необходимо инициализировать менеджер кэша (может быть в начальной загрузке), например:

$frontendOptions = array(
   'lifetime' => 7200
);

$backendOptions = array(
    'cache_dir' => '/tmp/'
);

// getting a Zend_Cache_Frontend_Output object
$cache = Zend_Cache::factory('Output',
                             'File',
                             $frontendOptions,
                             $backendOptions);
...