Maison > développement back-end > tutoriel php > Explication Yii 2.0 des méthodes de mise en cache des pages

Explication Yii 2.0 des méthodes de mise en cache des pages

巴扎黑
Libérer: 2023-03-15 06:06:02
original
995 Les gens l'ont consulté

La mise en cache des pages fait référence à la mise en cache du contenu de la page entière côté serveur. Par la suite, lorsque la même page est demandée, le contenu sera récupéré du cache plutôt que régénéré. L'article suivant présente principalement des informations pertinentes sur la façon dont Yii2.0 utilise la mise en cache des pages. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Cet article vous présente principalement le contenu pertinent sur la façon dont Yii2.0 utilise la mise en cache des pages et le partage pour votre référence et étude , jetons un coup d'œil à l'introduction détaillée.

J'ai initialement utilisé la mise en cache des pages et j'ai découvert que la méthode contenant les paramètres présentait des inconvénients. Elle ne pouvait mettre en cache que la première page, ce qui faisait que toutes les pages suivantes avec des paramètres différents affichaient la première page mise en cache. cache ; par conséquent, le cache des pages a été réécrit.

Exemple de code


<?php 


namespace common\lib;

use Yii;
use yii\caching\Cache;
use yii\di\Instance;
use yii\web\Response;
use yii\filters\PageCache as PCache;


/**
* 重写页面缓存,增加varByParam参数一列
*/
class PageCache extends PCache
{
 /**
 * 参数设置,默认无参数
 * 用法:&#39;varByParam&#39; => Yii::$app->request->get(&#39;id&#39;)
 * @var string
 */
 public $varByParam = &#39;&#39;;

 public function beforeAction($action)
 {
 if (!$this->enabled) {
  return true;
 }

 $this->cache = Instance::ensure($this->cache, Cache::className());

 if (is_array($this->dependency)) {
  $this->dependency = Yii::createObject($this->dependency);
 }

 $properties = [];
 foreach ([&#39;cache&#39;, &#39;duration&#39;, &#39;dependency&#39;, &#39;variations&#39;] as $name) {
  $properties[$name] = $this->$name;
 }
 $id = $this->varyByRoute ? $action->getUniqueId().$this->varByParam : __CLASS__;
 $response = Yii::$app->getResponse();
 ob_start();
 ob_implicit_flush(false);
 if ($this->view->beginCache($id, $properties)) {
  $response->on(Response::EVENT_AFTER_SEND, [$this, &#39;cacheResponse&#39;]);
  return true;
 } else {
  $data = $this->cache->get($this->calculateCacheKey());
  if (is_array($data)) {
  $this->restoreResponse($response, $data);
  }
  $response->content = ob_get_clean();
  return false;
 }
 }
}
 ?>
Copier après la connexion

Utilisation :


[
&#39;class&#39; => &#39;common\lib\PageCache&#39;,
  &#39;only&#39; => [&#39;view&#39;],
  &#39;duration&#39; => 0, //永不过期
  &#39;varByParam&#39; => Yii::$app->request->get(&#39;id&#39;),
],
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal