Yii - Cache de Fragmentos

O cache de fragmento fornece o cache de um fragmento de uma página da web.

Step 1 - Adicione uma nova função chamada actionFragmentCaching() para o SiteController.

public function actionFragmentCaching() {
   $user = new MyUser(); $user->name = "cached user name";
   $user->email = "[email protected]"; $user->save();
   $models = MyUser::find()->all(); return $this->render('cachedview', ['models' => $models]);
}

No código acima, criamos um novo usuário e exibimos um cachedview visualizar arquivo.

Step 2 - Agora, crie um novo arquivo chamado cachedview.php no views/site pasta.

<?php if ($this->beginCache('cachedview')) { ?>
   <?php foreach ($models as $model): ?>
      <?= $model->id; ?> <?= $model->name; ?>
      <?= $model->email; ?> <br/> <?php endforeach; ?> <?php $this->endCache(); } ?>
<?php echo "Count:", \app\models\MyUser::find()->count(); ?>

Incluímos uma lógica de geração de conteúdo em um par de métodos beginCache () e endCache (). Se o conteúdo for encontrado no cache, o método beginCache () o renderizará.

Step 3 - Vá para o URL http://localhost:8080/index.php?r=site/fragment-cachinge recarregue a página. A seguir será a saída.

Observe que o conteúdo entre os métodos beginCache () e endCache () é armazenado em cache. No banco de dados, temos 13 usuários, mas apenas 12 são exibidos.

Cache de página

O cache de página fornece o cache do conteúdo de uma página da web inteira. O cache de página é suportado poryii\filter\PageCache.

Step 1 - Modifique o behaviors() função do SiteController.

public function behaviors() {
   return [
      'access' => [
         'class' => AccessControl::className(),
         'only' => ['logout'],
         'rules' => [
            [
               'actions' => ['logout'],
               'allow' => true,
               'roles' => ['@'],
            ],
         ],
      ],
      'verbs' => [
         'class' => VerbFilter::className(),
         'actions' => [
            'logout' => ['post'],
         ],
      ],
      [
         'class' => 'yii\filters\PageCache',
         'only' => ['index'],
         'duration' => 60
      ],
   ];
}

O código acima armazena em cache a página de índice por 60 segundos.

Step 2 - Vá para o URL http://localhost:8080/index.php?r=site/index. Em seguida, modifique a mensagem de felicitações do arquivo de visualização do índice. Se você recarregar a página, não notará nenhuma mudança porque a página está armazenada em cache. Espere um minuto e recarregue a página novamente.

Cache HTTP

Os aplicativos da Web também podem usar o cache do lado do cliente. Para usá-lo, você pode configurar oyii\filter\HttpCache filtro para ações do controlador.

O cabeçalho Last-Modified usa um carimbo de data / hora para indicar se a página foi modificada.

Step 1 - Para habilitar o envio do cabeçalho Last-Modified, configure a propriedade yii \ filter \ HttpCache :: $ lastModified.

public function behaviors() {
   return [
      [
         'class' => 'yii\filters\HttpCache',
         'only' => ['index'],
         'lastModified' => function ($action, $params) { $q = new \yii\db\Query();
            return $q->from('news')->max('created_at');
         },
      ],
   ];
}

No código acima, habilitamos o cache HTTP apenas para a página de índice. Quando um navegador abre a página de índice pela primeira vez, a página é gerada no lado do servidor e enviada ao navegador. Na segunda vez, se nenhuma notícia for criada, o servidor não irá regenerar a página.

O cabeçalho Etag fornece um hash que representa o conteúdo da página. Se a página for alterada, o hash também será alterado.

Step 2 - Para habilitar o envio do cabeçalho Etag, configure o yii\filters\HttpCache::$etagSeed propriedade.

public function behaviors() {
   return [
      [
         'class' => 'yii\filters\HttpCache',
         'only' => ['index'],
         'etagSeed' => function ($action, $params) {
            $user = $this->findModel(\Yii::$app->request->get('id')); return serialize([$user->name, $user->email]);
         },
      ],
   ];
}

No código acima, habilitamos o cache HTTP para o indexapenas ação. Deve gerar o cabeçalho Etag HTTP com base no nome e e-mail do usuário. Quando um navegador abre a página de índice pela primeira vez, a página é gerada no lado do servidor e enviada ao navegador. Na segunda vez, se não houver alterações no nome ou no e-mail, o servidor não regenerará a página.