ホームページ >バックエンド開発 >PHPチュートリアル >Yii 2.0 のページキャッシュ方法の説明

Yii 2.0 のページキャッシュ方法の説明

巴扎黑
巴扎黑オリジナル
2017-08-13 11:30:00992ブラウズ

ページのキャッシュとは、サーバー側でページ全体のコンテンツをキャッシュすることを指します。その後、同じページがリクエストされると、コンテンツは再生成されるのではなく、キャッシュからフェッチされます。以下の記事では、Yii2.0 でのページ キャッシュの使用方法に関する関連情報を中心に紹介します。必要な方は参考にしてください。

はじめに

この記事では主に Yii2.0 でのページ キャッシュの使用方法に関する関連コンテンツを紹介します。詳細な紹介を見てみましょう。

最初はページ キャッシュを使用していましたが、パラメータを含むメソッドには最初のページしかキャッシュできず、異なるパラメータを持つ後続のすべてのページに最初にキャッシュされたページが表示されるという欠点があることがわかりました。キャッシュ; そのため、ページキャッシュが書き換えられました。

サンプルコード


<?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;
 }
 }
}
 ?>

使用:


[
&#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;),
],

以上がYii 2.0 のページキャッシュ方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。