Browse Source

guide-ja/caching-* revised [ci skip] (#16187)

tags/2.0.16
Nobuo Kihara 6 years ago committed by Alexander Makarov
parent
commit
0f11286346
  1. 142
      docs/guide-ja/caching-data.md
  2. 34
      docs/guide-ja/caching-fragment.md
  3. 40
      docs/guide-ja/caching-http.md
  4. 3
      docs/guide-ja/caching-overview.md
  5. 7
      docs/guide-ja/caching-page.md

142
docs/guide-ja/caching-data.md

@ -2,16 +2,17 @@
================== ==================
データ・キャッシュは PHP の変数をキャッシュに格納し、あとでキャッシュからそれらを読み込みます。 データ・キャッシュは PHP の変数をキャッシュに格納し、あとでキャッシュからそれらを読み込みます。
これは、[クエリ・キャッシュ](#query-caching) や [ページ・キャッシュ](caching-page.md) などの、より高度なキャッシュ機能の基礎でもあります。 これは、[クエリ・キャッシュ](#query-caching) や [ページ・キャッシュ](caching-page.md) など、
より高度なキャッシュ機能の基礎でもあります。
以下のコードが、データ・キャッシュの典型的な利用パターンです。ここで、`$cache` は [キャッシュ・コンポーネント](#cache-components) を指しています。 以下のコードが、データ・キャッシュの典型的な利用パターンです。ここで、`$cache` は [キャッシュ・コンポーネント](#cache-components)
を指しています。
```php ```php
// キャッシュから $data を取得しようと試みる // キャッシュから $data を取得しようと試みる
$data = $cache->get($key); $data = $cache->get($key);
if ($data === false) { if ($data === false) {
// キャッシュの中に $data が見つからない場合は一から作る // キャッシュの中に $data が見つからない場合は一から作る
$data = $this->calculateSomething(); $data = $this->calculateSomething();
@ -51,10 +52,13 @@ $data = $cache->getOrSet($key, function () use ($user_id) {
## キャッシュ・コンポーネント <span id="cache-components"></span> ## キャッシュ・コンポーネント <span id="cache-components"></span>
データ・キャッシュはメモリ、ファイル、データベースなどさまざまなキャッシュ・ストレージを表す、いわゆる *キャッシュ・コンポーネント* に依存しています。 データ・キャッシュはメモリ、ファイル、データベースなどさまざまなキャッシュ・ストレージを表す、
いわゆる *キャッシュ・コンポーネント* に依存しています。
キャッシュ・コンポーネントは通常グローバルに設定しアクセスできるように [アプリケーション・コンポーネント](structure-application-components.md) として登録されます。 キャッシュ・コンポーネントは通常グローバルに設定しアクセスできるように
以下のコードは、二台のキャッシュ・サーバを用いる [Memcached](http://memcached.org/) を使うように `cache` アプリケーション・コンポーネントを構成する方法を示すものです。 [アプリケーション・コンポーネント](structure-application-components.md) として登録されます。
以下のコードは、二台のキャッシュ・サーバを用いる [Memcached](http://memcached.org/) を使うように
`cache` アプリケーション・コンポーネントを構成する方法を示すものです。
```php ```php
'components' => [ 'components' => [
@ -78,7 +82,8 @@ $data = $cache->getOrSet($key, function () use ($user_id) {
こうすると、上記のキャッシュ・コンポーネントに `Yii::$app->cache` という式でアクセスできるようになります。 こうすると、上記のキャッシュ・コンポーネントに `Yii::$app->cache` という式でアクセスできるようになります。
すべてのキャッシュ・コンポーネントは同じ API をサポートしているので、アプリケーションの構成情報で設定しなおせば、キャッシュを使っているコードに変更を加えることなく、異なるキャッシュ・コンポーネントに入れ替えることができます。 すべてのキャッシュ・コンポーネントは同じ API をサポートしているので、アプリケーションの構成情報で設定しなおせば、
キャッシュを使っているコードに変更を加えることなく、異なるキャッシュ・コンポーネントに入れ替えることができます。
例えば上記の構成を [[yii\caching\ApcCache|APC キャッシュ]] を使うように変更する場合は以下のようにします: 例えば上記の構成を [[yii\caching\ApcCache|APC キャッシュ]] を使うように変更する場合は以下のようにします:
@ -90,58 +95,79 @@ $data = $cache->getOrSet($key, function () use ($user_id) {
], ],
``` ```
> Tip: キャッシュ・コンポーネントは複数登録することができます。`cache` という名前のコンポーネントが、キャッシュに依存する多数のクラスによってデフォルトで使用されます (例えば [[yii\web\UrlManager]] など) 。 > Tip: キャッシュ・コンポーネントは複数登録することができます。`cache` という名前のコンポーネントが、
キャッシュに依存する多数のクラスによってデフォルトで使用されます (例えば [[yii\web\UrlManager]] など) 。
### サポートされているキャッシュ・ストレージ <span id="supported-cache-storage"></span> ### サポートされているキャッシュ・ストレージ <span id="supported-cache-storage"></span>
Yii はさまざまなキャッシュ・ストレージをサポートしています。以下概要です: Yii はさまざまなキャッシュ・ストレージをサポートしています。以下がその概要です:
* [[yii\caching\ApcCache]]: PHP の [APC](http://php.net/manual/ja/book.apc.php) 拡張モジュールを使用します。 * [[yii\caching\ApcCache]]: PHP の [APC](http://php.net/manual/ja/book.apc.php) 拡張モジュールを使用します。
集中型の重厚なアプリケーションのキャッシュを扱うときには最速の一つとして考えることができます 集中型の重厚なアプリケーションのキャッシュを扱うときには最速の一つとして考えることができます
(例えば、サーバが一台で、専用のロード・バランサを持っていない、などの場合)。 (例えば、サーバが一台で、専用のロード・バランサを持っていない、などの場合)。
* [[yii\caching\DbCache]]: キャッシュされたデータを格納するためにデータベースのテーブルを使用します。このキャッシュを使用するには [[yii\caching\DbCache::cacheTable]] で指定したテーブルを作成する必要があります。 * [[yii\caching\DbCache]]: キャッシュされたデータを格納するためにデータベースのテーブルを使用します。
このキャッシュを使用するには [[yii\caching\DbCache::cacheTable]] で指定したテーブルを作成する必要があります。
* [[yii\caching\ArrayCache]]: 配列に値を保存することによって、現在のリクエストのためだけのキャッシュを提供します。
ArrayCache のパフォーマンスを高めるために、[[yii\caching\ArrayCache::$serializer]] を `false` に設定して、
保存するデータのシリアライズを無効にすることが出来ます。 .
* [[yii\caching\DummyCache]]: 実際にはキャッシュを行わない、キャッシュのプレースホルダとして働きます。 * [[yii\caching\DummyCache]]: 実際にはキャッシュを行わない、キャッシュのプレースホルダとして働きます。
このコンポーネントの目的は、キャッシュの可用性をチェックする必要があるコードを簡略化することです。 このコンポーネントの目的は、キャッシュの可用性をチェックする必要があるコードを簡略化することです。
たとえば、開発中やサーバに実際のキャッシュ・サポートがない場合でも、このキャッシュを使用するようにキャッシュ・コンポーネントを構成することができます。 たとえば、開発中やサーバに実際のキャッシュ・サポートがない場合でも、
そして、実際のキャッシュ・サポートが有効になったときに、対応するキャッシュ・コンポーネントに切替えて使用します。 このキャッシュを使用するようにキャッシュ・コンポーネントを構成することができます。
どちらの場合も、`Yii::$app->cache` が `null` かも知れないと心配せずに、データを取得するために同じコード `Yii::$app->cache->get($key)` を使用できます。 そして、実際のキャッシュ・サポートが有効になったときに、対応するキャッシュ・コンポーネントに切替えて使用します。
* [[yii\caching\FileCache]]: キャッシュされたデータを保存するために通常のファイルを使用します。これはページ・コンテントなど大きなかたまりのデータに特に適しています。 どちらの場合も、`Yii::$app->cache` が `null` かも知れないと心配せずに、
* [[yii\caching\MemCache]]: PHP の [Memcache](http://php.net/manual/ja/book.memcache.php) と [Memcached](http://php.net/manual/ja/book.memcached.php) 拡張モジュールを使用します。 データを取得するために同じコード `Yii::$app->cache->get($key)` を使用できます。
分散型のアプリケーションでキャッシュを扱うときには最速の一つとして考えることができます (例えば、複数台のサーバで、ロード・バランサがある、などの場合) 。 * [[yii\caching\FileCache]]: キャッシュされたデータを保存するために通常のファイルを使用します。
* [[yii\redis\Cache]]: [Redis](http://redis.io/) の key-value ストアに基づいてキャッシュ・コンポーネントを実装しています。(Redis の バージョン 2.6.12 以降が必要とされます) 。 これはページ・コンテントなど大きなかたまりのデータに特に適しています。
* [[yii\caching\WinCache]]: PHP の [WinCache](http://iis.net/downloads/microsoft/wincache-extension) ([関連リンク](http://php.net/manual/ja/book.wincache.php)) 拡張モジュールを使用します。 * [[yii\caching\MemCache]]: PHP の [Memcache](http://php.net/manual/ja/book.memcache.php) と
[Memcached](http://php.net/manual/ja/book.memcached.php) 拡張モジュールを使用します。
分散型のアプリケーションでキャッシュを扱うときには最速の一つとして考えることができます
(例えば、複数台のサーバで、ロード・バランサがある、などの場合) 。
* [[yii\redis\Cache]]: [Redis](http://redis.io/) の key-value ストアに基づいてキャッシュ・コンポーネントを実装しています。
(Redis の バージョン 2.6.12 以降が必要とされます) 。
* [[yii\caching\WinCache]]: PHP の [WinCache](http://iis.net/downloads/microsoft/wincache-extension) エクステンションを使用します。
([参照リンク](http://php.net/manual/ja/book.wincache.php))
* [[yii\caching\XCache]] _(非推奨)_: PHP の [XCache](http://xcache.lighttpd.net/) 拡張モジュールを使用します。 * [[yii\caching\XCache]] _(非推奨)_: PHP の [XCache](http://xcache.lighttpd.net/) 拡張モジュールを使用します。
* [[yii\caching\ZendDataCache]] _(非推奨)_: キャッシュ・メディアして [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) を使用します。 * [[yii\caching\ZendDataCache]] _(非推奨)_:
キャッシュ・メディアとして [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm)
を使用します。
> Tip: 同じアプリケーション内で異なるキャッシュを使用することもできます。一般的なやり方として、小さくとも常に使用されるデータ (例えば、統計データ) を格納する場合はメモリ・ベースのキャッシュ・ストレージを使用し、大きくて使用頻度の低いデータ (例えば、ページ・コンテント) を格納する場合はファイル・ベース、またはデータベースのキャッシュ・ストレージを使用します 。 > Tip: 同じアプリケーション内で異なるキャッシュを使用することもできます。
一般的なやり方として、小さくとも常に使用されるデータ (例えば、統計データ) を格納する場合はメモリ・ベースのキャッシュ・ストレージを使用し、
大きくて使用頻度の低いデータ (例えば、ページ・コンテント) を格納する場合はファイル・ベース、またはデータベースのキャッシュ・ストレージを使用します 。
## キャッシュ API <span id="cache-apis"></span> ## キャッシュ API <span id="cache-apis"></span>
すべてのキャッシュ・コンポーネントが同じ基底クラス [[yii\caching\Cache]] を持っているので、以下の API をサポートしています。 すべてのキャッシュ・コンポーネントが同じ基底クラス [[yii\caching\Cache]] を持っているので、以下の API をサポートしています。
* [[yii\caching\Cache::get()|get()]]: 指定されたキーを用いてキャッシュからデータを取得します。データが見つからないか、もしくは有効期限が切れたり無効になったりしている場合は false を返します。 * [[yii\caching\Cache::get()|get()]]: 指定されたキーを用いてキャッシュからデータを取得します。
データが見つからないか、もしくは有効期限が切れたり無効になったりしている場合は false を返します。
* [[yii\caching\Cache::set()|set()]]: キーによって識別されるデータをキャッシュに格納します。 * [[yii\caching\Cache::set()|set()]]: キーによって識別されるデータをキャッシュに格納します。
* [[yii\caching\Cache::add()|add()]]: キーがキャッシュ内で見つからない場合に、キーによって識別されるデータをキャッシュに格納します。 * [[yii\caching\Cache::add()|add()]]: キーがキャッシュ内で見つからない場合に、キーによって識別されるデータをキャッシュに格納します。
* [[yii\caching\Cache::getOrSet()|getOrSet()]]: 指定されたキーを用いてキャッシュからデータを取得します。 * [[yii\caching\Cache::getOrSet()|getOrSet()]]: 指定されたキーを用いてキャッシュからデータを取得します。
取得できなかった場合は、渡されたコールバック関数を実行し、関数の返り値をそのキーでキャッシュに保存し、そしてその値を返します。 取得できなかった場合は、渡されたコールバック関数を実行し、関数の返り値をそのキーでキャッシュに保存し、そしてその値を返します。
* [[yii\caching\Cache::multiGet()|multiGet()]]: 指定されたキーを用いてキャッシュから複数のデータを取得します。 * [[yii\caching\Cache::multiGet()|multiGet()]]: 指定されたキーを用いてキャッシュから複数のデータを取得します。
* [[yii\caching\Cache::multiSet()|multiSet()]]: キャッシュに複数のデータを格納します。各データはキーによって識別されます。 * [[yii\caching\Cache::multiSet()|multiSet()]]: キャッシュに複数のデータを格納します。各データはキーによって識別されます。
* [[yii\caching\Cache::multiAdd()|multiAdd()]]: キャッシュに複数のデータを格納します。各データはキーによって識別されます。もしキャッシュ内にキーがすでに存在する場合はスキップされます。 * [[yii\caching\Cache::multiAdd()|multiAdd()]]: キャッシュに複数のデータを格納します。
各データはキーによって識別されます。もしキャッシュ内にキーがすでに存在する場合はスキップされます。
* [[yii\caching\Cache::exists()|exists()]]: 指定されたキーがキャッシュ内で見つかったかどうかを示す値を返します。 * [[yii\caching\Cache::exists()|exists()]]: 指定されたキーがキャッシュ内で見つかったかどうかを示す値を返します。
* [[yii\caching\Cache::delete()|delete()]]: キャッシュからキーによって識別されるデータを削除します。 * [[yii\caching\Cache::delete()|delete()]]: キャッシュからキーによって識別されるデータを削除します。
* [[yii\caching\Cache::flush()|flush()]]: キャッシュからすべてのデータを削除します。 * [[yii\caching\Cache::flush()|flush()]]: キャッシュからすべてのデータを削除します。
> Note: boolean 型の `false` を直接にキャッシュしてはいけません。 > Note: boolean 型の `false` を直接にキャッシュしてはいけません。
なぜなら、[[yii\caching\Cache::get()|get()]] メソッドは、データがキャッシュ内に見つからないことを示すために戻り値として `false` を使用しているからです。 なぜなら、[[yii\caching\Cache::get()|get()]] メソッドは、データがキャッシュ内に見つからないことを示すために戻り値として `false` を使用しているからです。
代りに、配列内に `false` を置いてキャッシュすることによって、この問題を回避して下さい。 代りに、配列内に `false` を置いてキャッシュすることによって、この問題を回避して下さい。
キャッシュされたデータを取得する際に発生するオーバーヘッドを減らすために、MemCache, APC などのいくつかのキャッシュ・ストレージは、バッチ・モードで複数のキャッシュされた値を取得することをサポートしています。 キャッシュされたデータを取得する際に発生するオーバーヘッドを減らすために、MemCache, APC などのいくつかのキャッシュ・ストレージは、
バッチ・モードで複数のキャッシュされた値を取得することをサポートしています。
[[yii\caching\Cache::multiGet()|multiGet()]] や [[yii\caching\Cache::multiAdd()|multiAdd()]] などの API はこの機能を十分に引き出すために提供されています。 [[yii\caching\Cache::multiGet()|multiGet()]] や [[yii\caching\Cache::multiAdd()|multiAdd()]] などの API はこの機能を十分に引き出すために提供されています。
基礎となるキャッシュ・ストレージがこの機能をサポートしていない場合には、シミュレートされます。 基礎となるキャッシュ・ストレージがこの機能をサポートしていない場合には、シミュレートされます。
[[yii\caching\Cache]] は `ArrayAccess` インタフェイスを継承しているので、キャッシュ・コンポーネントは配列のように扱うことができます。以下はいくつかの例です: [[yii\caching\Cache]] は `ArrayAccess` インタフェイスを継承しているので、キャッシュ・コンポーネントは配列のように扱うことができます。
以下はいくつかの例です:
```php ```php
$cache['var1'] = $value1; // $cache->set('var1', $value1); と同等 $cache['var1'] = $value1; // $cache->set('var1', $value1); と同等
@ -155,7 +181,8 @@ $value2 = $cache['var2']; // $value2 = $cache->get('var2'); と同等
キャッシュ内にデータを格納するときはキーを指定する必要があります。 キャッシュ内にデータを格納するときはキーを指定する必要があります。
また、あとでキャッシュからデータを取得するときは、それに対応するキーを提供しなければなりません。 また、あとでキャッシュからデータを取得するときは、それに対応するキーを提供しなければなりません。
キャッシュのキーとしては、文字列または任意の値を使用することができます。キーが文字列でない場合は、自動的に文字列にシリアライズされます。 キャッシュのキーとしては、文字列または任意の値を使用することができます。
キーが文字列でない場合は、自動的に文字列にシリアライズされます。
キャッシュのキーを定義する一般的なやり方として、全ての決定要素を配列の形で含めるという方方があります。 キャッシュのキーを定義する一般的なやり方として、全ての決定要素を配列の形で含めるという方方があります。
例えば [[yii\db\Schema]] はデータベース・テーブルのスキーマ情報を以下のキーを使用してキャッシュしています。 例えば [[yii\db\Schema]] はデータベース・テーブルのスキーマ情報を以下のキーを使用してキャッシュしています。
@ -175,7 +202,8 @@ $value2 = $cache['var2']; // $value2 = $cache->get('var2'); と同等
文字列または整数のキーだけです。それらより複雑なキーを設定する必要がある場合は、 文字列または整数のキーだけです。それらより複雑なキーを設定する必要がある場合は、
[[yii\caching\Cache::set()|set()]] または [[yii\caching\Cache::add()|add()]] によって、値を個別に保存してください。 [[yii\caching\Cache::set()|set()]] または [[yii\caching\Cache::add()|add()]] によって、値を個別に保存してください。
同じキャッシュ・ストレージが異なるアプリケーションによって使用されているときは、キャッシュのキーの競合を避けるために、各アプリケーションではユニークなキーの接頭辞を指定する必要があります。 同じキャッシュ・ストレージが異なるアプリケーションによって使用されているときは、
キャッシュのキーの競合を避けるために、各アプリケーションではユニークなキーの接頭辞を指定する必要があります。
これは [[yii\caching\Cache::keyPrefix]] プロパティを設定することで出来ます。例えば、アプリケーション構成情報で以下のように書くことができます: これは [[yii\caching\Cache::keyPrefix]] プロパティを設定することで出来ます。例えば、アプリケーション構成情報で以下のように書くことができます:
```php ```php
@ -192,10 +220,12 @@ $value2 = $cache['var2']; // $value2 = $cache->get('var2'); と同等
### キャッシュの有効期限 <span id="cache-expiration"></span> ### キャッシュの有効期限 <span id="cache-expiration"></span>
キャッシュに格納されたデータは、何らかのキャッシュ・ポリシー (例えば、キャッシュ・スペースがいっぱいになったときは最も古いデータが削除される、など) の執行によって除去されない限り、永遠に残り続けます。 キャッシュに格納されたデータは、何らかのキャッシュ・ポリシー (例えば、キャッシュ・スペースがいっぱいになったときは最も古いデータが削除される、など)
の執行によって除去されない限り、永遠に残り続けます。
この動作を変えるために [[yii\caching\Cache::set()|set()]] を呼んでデータ・アイテムを保存するときに、有効期限パラメータを指定することができます。 この動作を変えるために [[yii\caching\Cache::set()|set()]] を呼んでデータ・アイテムを保存するときに、有効期限パラメータを指定することができます。
このパラメータは、データ・アイテムが何秒間有効なものとしてキャッシュ内に残ることが出来るかを示します。 このパラメータは、データ・アイテムが何秒間有効なものとしてキャッシュ内に残ることが出来るかを示します。
[[yii\caching\Cache::get()|get()]] でデータ・アイテムを取得する際に有効期限が切れていた場合は、キャッシュ内にデータが見つからなかったことを示す `false` が返されます。例えば、 [[yii\caching\Cache::get()|get()]] でデータ・アイテムを取得する際に有効期限が切れていた場合は、
キャッシュ内にデータが見つからなかったことを示す `false` が返されます。例えば、
```php ```php
// 最大で 45 秒間キャッシュ内にデータを保持する // 最大で 45 秒間キャッシュ内にデータを保持する
@ -209,7 +239,8 @@ if ($data === false) {
} }
``` ```
バージョン 2.0.11 以降は、デフォルトの無限の有効期限に替えて特定の有効期限を指定したい場合には、キャッシュ・コンポーネントの構成で [[yii\caching\Cache::$defaultDuration|defaultDuration]] の値を指定することが出来ます。 バージョン 2.0.11 以降は、デフォルトの無限の有効期限に替えて特定の有効期限を指定したい場合には、
キャッシュ・コンポーネントの構成で [[yii\caching\Cache::$defaultDuration|defaultDuration]] の値を指定することが出来ます。
これによって、特定の `duration` パラメータを毎回 [[yii\caching\Cache::set()|set()]] に渡さなくてもよくなります。 これによって、特定の `duration` パラメータを毎回 [[yii\caching\Cache::set()|set()]] に渡さなくてもよくなります。
@ -218,10 +249,12 @@ if ($data === false) {
有効期限の設定に加えて、キャッシュされたデータは、いわゆる *キャッシュの依存* (キャッシュが依存している事物) の変化によって無効にすることもできます。 有効期限の設定に加えて、キャッシュされたデータは、いわゆる *キャッシュの依存* (キャッシュが依存している事物) の変化によって無効にすることもできます。
例えば [[yii\caching\FileDependency]] は、キャッシュがファイルの更新時刻に依存していることを表しています。 例えば [[yii\caching\FileDependency]] は、キャッシュがファイルの更新時刻に依存していることを表しています。
この依存が変化したときは、対応するファイルが更新されたことを意味します。 この依存が変化したときは、対応するファイルが更新されたことを意味します。
その結果、キャッシュ内で見つかった古いファイルのコンテントは、無効とされるべきであり [[yii\caching\Cache::get()|get()]] は `false` を返さなければなりません。 その結果、キャッシュ内で見つかった古いファイルのコンテントは、無効とされるべきであり
[[yii\caching\Cache::get()|get()]] は `false` を返さなければなりません。
キャッシュの依存は [[yii\caching\Dependency]] の子孫クラスのオブジェクトとして表現されます。 キャッシュの依存は [[yii\caching\Dependency]] の子孫クラスのオブジェクトとして表現されます。
[[yii\caching\Cache::set()|set()]] でキャッシュにデータ・アイテムを格納する際に、関連するキャッシュの依存のオブジェクトを一緒に渡すことができます。例えば、 [[yii\caching\Cache::set()|set()]] でキャッシュにデータ・アイテムを格納する際に、
関連するキャッシュの依存のオブジェクトを一緒に渡すことができます。例えば、
```php ```php
// example.txt ファイルの更新日時への依存を作成します。 // example.txt ファイルの更新日時への依存を作成します。
@ -244,7 +277,7 @@ $data = $cache->get($key);
- [[yii\caching\ExpressionDependency]]: 指定された PHP の式の結果が変更された場合、依存が変更されます。 - [[yii\caching\ExpressionDependency]]: 指定された PHP の式の結果が変更された場合、依存が変更されます。
- [[yii\caching\FileDependency]]: ファイルの最終更新日時が変更された場合、依存が変更されます。 - [[yii\caching\FileDependency]]: ファイルの最終更新日時が変更された場合、依存が変更されます。
- [[yii\caching\TagDependency]]: キャッシュされるデータ・アイテムに一つまたは複数のタグを関連付けます。 - [[yii\caching\TagDependency]]: キャッシュされるデータ・アイテムに一つまたは複数のタグを関連付けます。
[[yii\caching\TagDependency::invalidate()]] を呼び出すことによって、指定されたタグ (複数可) を持つキャッシュされたデータ・アイテムを無効にすることができます。 [[yii\caching\TagDependency::invalidate()]] を呼び出すことによって、指定されたタグ (複数可) を持つキャッシュされたデータ・アイテムを無効にすることができます。
> Note: 依存を有するキャッシュについて [[yii\caching\Cache::exists()|exists()]] メソッドを使用することは避けてください。 > Note: 依存を有するキャッシュについて [[yii\caching\Cache::exists()|exists()]] メソッドを使用することは避けてください。
このメソッドは、キャッシュされたデータに関連づけられた依存がある場合でも、依存が変化したかどうかをチェックしません。 このメソッドは、キャッシュされたデータに関連づけられた依存がある場合でも、依存が変化したかどうかをチェックしません。
@ -253,7 +286,8 @@ $data = $cache->get($key);
## クエリ・キャッシュ <span id="query-caching"></span> ## クエリ・キャッシュ <span id="query-caching"></span>
クエリ・キャッシュは、データ・キャッシュ上に構築された特別なキャッシュ機能で、データベースのクエリ結果をキャッシュするために提供されています。 クエリ・キャッシュは、データ・キャッシュ上に構築された特別なキャッシュ機能で、
データベースのクエリ結果をキャッシュするために提供されています。
クエリ・キャッシュは [[yii\db\Connection|データベース接続]] と有効な `cache` [アプリケーション・コンポーネント](#cache-components) を必要とします。 クエリ・キャッシュは [[yii\db\Connection|データベース接続]] と有効な `cache` [アプリケーション・コンポーネント](#cache-components) を必要とします。
`$db` を [[yii\db\Connection]] のインスタンスと仮定した場合、クエリ・キャッシュの基本的な使い方は以下のようになります: `$db` を [[yii\db\Connection]] のインスタンスと仮定した場合、クエリ・キャッシュの基本的な使い方は以下のようになります:
@ -267,6 +301,7 @@ $result = $db->cache(function ($db) {
}); });
``` ```
クエリ・キャッシュは [DAO](db-dao.md) だけではなく [アクティブ・レコード](db-active-record.md) でも使用することができます。 クエリ・キャッシュは [DAO](db-dao.md) だけではなく [アクティブ・レコード](db-active-record.md) でも使用することができます。
```php ```php
@ -275,7 +310,8 @@ $result = Customer::getDb()->cache(function ($db) {
}); });
``` ```
> Info: いくつかの DBMS (例えば [MySQL](http://dev.mysql.com/doc/refman/5.1/ja/query-cache.html)) もデータベース・サーバ・サイドのクエリ・キャッシュをサポートしています。 > Info: いくつかの DBMS (例えば [MySQL](http://dev.mysql.com/doc/refman/5.1/ja/query-cache.html))
もデータベース・サーバ・サイドのクエリ・キャッシュをサポートしています。
どちらのクエリ・キャッシュ・メカニズムを選んでも構いません。 どちらのクエリ・キャッシュ・メカニズムを選んでも構いません。
前述した Yii のクエリ・キャッシュにはキャッシュの依存を柔軟に指定できるという利点があり、潜在的にはより効率的です。 前述した Yii のクエリ・キャッシュにはキャッシュの依存を柔軟に指定できるという利点があり、潜在的にはより効率的です。
@ -293,8 +329,10 @@ User::find()->cache(7200)->all();
クエリ・キャッシュには [[yii\db\Connection]] を通して設定可能な三つのグローバルなオプションがあります: クエリ・キャッシュには [[yii\db\Connection]] を通して設定可能な三つのグローバルなオプションがあります:
* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: クエリ・キャッシュを可能にするかどうか。デフォルトは `true` です。 * [[yii\db\Connection::enableQueryCache|enableQueryCache]]: クエリ・キャッシュを可能にするかどうか。デフォルトは `true` です。
実効的にクエリ・キャッシュをオンにするには [[yii\db\Connection::queryCache|queryCache]] によって指定される有効なキャッシュを持っている必要があることに注意してください。 実効的にクエリ・キャッシュをオンにするには [[yii\db\Connection::queryCache|queryCache]]
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: これはクエリ結果がキャッシュ内に有効な状態として持続できる秒数を表します。 によって指定される有効なキャッシュを持っている必要があることに注意してください。
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: これはクエリ結果がキャッシュ内に有効な状態として
持続できる秒数を表します。
クエリ・キャッシュを永遠にキャッシュに残したい場合は 0 を指定することができます。 クエリ・キャッシュを永遠にキャッシュに残したい場合は 0 を指定することができます。
このプロパティは [[yii\db\Connection::cache()]] が持続時間を指定せず呼び出されたときに使用されるデフォルト値です。 このプロパティは [[yii\db\Connection::cache()]] が持続時間を指定せず呼び出されたときに使用されるデフォルト値です。
* [[yii\db\Connection::queryCache|queryCache]]: これはキャッシュ・アプリケーション・コンポーネントの ID を表します。 * [[yii\db\Connection::queryCache|queryCache]]: これはキャッシュ・アプリケーション・コンポーネントの ID を表します。
@ -303,7 +341,8 @@ User::find()->cache(7200)->all();
### 使い方 <span id="query-caching-usages"></span> ### 使い方 <span id="query-caching-usages"></span>
クエリ・キャッシュを使用する必要がある複数の SQL クエリを持っている場合は [[yii\db\Connection::cache()]] を使用することができます。使い方としては以下のように、 クエリ・キャッシュを使用する必要がある複数の SQL クエリを持っている場合は [[yii\db\Connection::cache()]]
を使用することができます。使い方は以下のとおりです。
```php ```php
$duration = 60; // クエリ結果を 60 秒間 キャッシュ $duration = 60; // クエリ結果を 60 秒間 キャッシュ
@ -320,10 +359,11 @@ $result = $db->cache(function ($db) {
無名関数内の任意の SQL クエリは、指定した依存とともに指定された期間キャッシュされます。 無名関数内の任意の SQL クエリは、指定した依存とともに指定された期間キャッシュされます。
もしキャッシュ内に有効なクエリ結果が見つかった場合は、クエリはスキップされ、代りに結果がキャッシュから提供されます。 もしキャッシュ内に有効なクエリ結果が見つかった場合は、クエリはスキップされ、代りに結果がキャッシュから提供されます。
`$duration` の指定がない場合 [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] で指定されている値が代りに使用されます。 `$duration` の指定がない場合 [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]
で指定されている値が代りに使用されます。
また、`cache()` 内でいくつかの特定のクエリに対してクエリ・キャッシュを無効にすることもできます。この場合 [[yii\db\Connection::noCache()]] を使用します。
場合によっては `cache()` 内でいくつかの特定のクエリに対してクエリ・キャッシュを無効にしたいことが有るでしょう。
そのときは [[yii\db\Connection::noCache()]] を使用します。
```php ```php
$result = $db->cache(function ($db) { $result = $db->cache(function ($db) {
@ -342,7 +382,8 @@ $result = $db->cache(function ($db) {
}); });
``` ```
単一のクエリのためにクエリ・キャッシュを使用する場合は、コマンドを構築するときに [[yii\db\Command::cache()]] を呼び出すことができます。例えば、 単一のクエリのためだけにクエリ・キャッシュを使用したい場合は、コマンドを構築するときに [[yii\db\Command::cache()]]
を呼び出すことができます。例えば、
```php ```php
// クエリ・キャッシュを使い、期間を 60 秒にセットする // クエリ・キャッシュを使い、期間を 60 秒にセットする
@ -369,9 +410,12 @@ $result = $db->cache(function ($db) {
### 制約 <span id="query-caching-limitations"></span> ### 制約 <span id="query-caching-limitations"></span>
リソース・ハンドラを返すようなクエリにはクエリ・キャッシュは働きません。 リソース・ハンドラを返すようなクエリにはクエリ・キャッシュは働きません。
例えば、いくつかの DBMS において BLOB 型のカラムを用いる場合、クエリ結果はカラム・データに対するリソース・ハンドラを返します。 例えば、いくつかの DBMS において BLOB 型のカラムを用いる場合、
クエリ結果はカラム・データに対するリソース・ハンドラを返します。
いくつかのキャッシュ・ストレージはサイズに制約があります。例えば Memcache では、各エントリのサイズは 1MB が上限値です。そのためクエリ結果のサイズがこの制約を越える場合、キャッシュは失敗します。 いくつかのキャッシュ・ストレージはサイズに制約があります。
例えば Memcache では、各エントリのサイズは 1MB が上限値です。
そのためクエリ結果のサイズがこの制約を越える場合、キャッシュは失敗します。
## キャッシュのフラッシュ <span id="cache-flushing"> ## キャッシュのフラッシュ <span id="cache-flushing">
@ -381,7 +425,7 @@ $result = $db->cache(function ($db) {
コンソールから `yii cache/flush` を呼ぶことによっても、キャッシュをフラッシュすることが出来ます。 コンソールから `yii cache/flush` を呼ぶことによっても、キャッシュをフラッシュすることが出来ます。
- `yii cache`: アプリケーションで利用可能なキャッシュのリストを表示します。 - `yii cache`: アプリケーションで利用可能なキャッシュのリストを表示します。
- `yii cache/flush cache1 cache2`: キャッシュ・コンポーネント `cache1``cache2` をフラッシュします - `yii cache/flush cache1 cache2`: キャッシュ・コンポーネント `cache1``cache2` をフラッシュします
(複数のコンポーネント名をスペースで区切って渡すことが出来ます) (複数のコンポーネント名をスペースで区切って渡すことが出来ます)
- `yii cache/flush-all`: アプリケーションの全てのキャッシュ・コンポーネントをフラッシュします。 - `yii cache/flush-all`: アプリケーションの全てのキャッシュ・コンポーネントをフラッシュします。
> Info: デフォルトでは、コンソール・アプリケーションは独立した構成情報ファイルを使用します。 > Info: デフォルトでは、コンソール・アプリケーションは独立した構成情報ファイルを使用します。

34
docs/guide-ja/caching-fragment.md

@ -17,21 +17,26 @@ if ($this->beginCache($id)) {
``` ```
つまり、コンテント生成ロジックを [[yii\base\View::beginCache()|beginCache()]] と [[yii\base\View::endCache()|endCache()]] の呼び出しのペアで囲みます。 つまり、コンテント生成ロジックを [[yii\base\View::beginCache()|beginCache()]] と [[yii\base\View::endCache()|endCache()]] の呼び出しのペアで囲みます。
コンテントがキャッシュ内で見つかった場合、[[yii\base\View::beginCache()|beginCache()]] はキャッシュされたコンテントをレンダリングして `false` を返し、結果として、コンテント生成ロジックがスキップされます。 コンテントがキャッシュ内で見つかった場合、[[yii\base\View::beginCache()|beginCache()]] はキャッシュされたコンテントをレンダリングして
それ以外の場合はコンテント生成ロジックが呼ばれ、そして [[yii\base\View::endCache()|endCache()]] が呼ばれたときに、生成されたコンテントがキャプチャされ、キャッシュに格納されます。 `false` を返し、結果として、コンテント生成ロジックがスキップされます。
それ以外の場合はコンテント生成ロジックが呼ばれ、そして [[yii\base\View::endCache()|endCache()]] が呼ばれたときに、
生成されたコンテントがキャプチャされ、キャッシュに格納されます。
[データ・キャッシュ](caching-data.md) と同様に、キャッシュされるコンテントを識別するためにユニークな `$id` が必要になります。 [データ・キャッシュ](caching-data.md) と同様に、キャッシュされるコンテントを識別するためにユニークな `$id` が必要になります。
## キャッシュのオプション <span id="caching-options"></span> ## キャッシュのオプション <span id="caching-options"></span>
[[yii\base\View::beginCache()|beginCache()]] メソッドの 2 番目のパラメータとしてオプションの配列を渡すことによって、フラグメント・キャッシュに関する追加のオプションを指定することができます。 [[yii\base\View::beginCache()|beginCache()]] メソッドの 2 番目のパラメータとしてオプションの配列を渡すことによって、
舞台の裏側では、このオプションの配列が、実際のフラグメント・キャッシュ機能を実装する [[yii\widgets\FragmentCache]] ウィジェットを構成するために使用されます。 フラグメント・キャッシュに関する追加のオプションを指定することができます。
舞台の裏側では、このオプションの配列が、実際のフラグメント・キャッシュ機能を実装する
[[yii\widgets\FragmentCache]] ウィジェットを構成するために使用されます。
### 持続時間 <span id="duration"></span> ### 持続時間 <span id="duration"></span>
おそらくフラグメント・キャッシュで通常よく使われるであろうオプションは [[yii\widgets\FragmentCache::duration|duration]] でしょう。 おそらくフラグメント・キャッシュで通常よく使われるであろうオプションは [[yii\widgets\FragmentCache::duration|duration]] でしょう。
このオプションはコンテントがどれだけの時間キャッシュ内において有効であるかを指定します。以下のコードは最大で 1 時間コンテントの断片をキャッシュします: このオプションはコンテントがどれだけの時間キャッシュ内において有効であるかを指定します。
以下のコードは最大で 1 時間コンテントの断片をキャッシュします:
```php ```php
if ($this->beginCache($id, ['duration' => 3600])) { if ($this->beginCache($id, ['duration' => 3600])) {
@ -42,15 +47,16 @@ if ($this->beginCache($id, ['duration' => 3600])) {
} }
``` ```
このオプションがセットされていない場合は、デフォルトである 60 が使われます。 このオプションがセットされていない場合は、デフォルトである 60 が使われます。すなわち、キャッシュされたコンテントの有効期限は 60 秒後に切れることになります。
すなわち、キャッシュされたコンテントの有効期限は 60 秒後に切れることになります。
### 依存 <span id="dependencies"></span> ### 依存 <span id="dependencies"></span>
[データ・キャッシュ](caching-data.md#cache-dependencies) と同様に、キャッシュされたコンテントの断片は依存を持つことができます。 [データ・キャッシュ](caching-data.md#cache-dependencies) と同様に、キャッシュされたコンテントの断片は依存を持つことができます。
例えば、表示されている投稿の内容は、投稿が変更されたか否かに依存します。 例えば、表示されている投稿の内容は、投稿が変更されたか否かに依存します。
依存を指定するには [[yii\widgets\FragmentCache::dependency|dependency]] オプションに [[yii\caching\Dependency]] オブジェクトを指定するか、または依存オブジェクトを作成するための構成情報配列を指定します。 依存を指定するには [[yii\widgets\FragmentCache::dependency|dependency]] オプションに [[yii\caching\Dependency]]
オブジェクトを指定するか、または依存オブジェクトを作成するための構成情報配列を指定します。
以下のコードはコンテントの断片が `updated_at` カラムの値の変化に依存していることを指定しています: 以下のコードはコンテントの断片が `updated_at` カラムの値の変化に依存していることを指定しています:
```php ```php
@ -107,8 +113,7 @@ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
## キャッシュのネスト <span id="nested-caching"></span> ## キャッシュのネスト <span id="nested-caching"></span>
フラグメント・キャッシュはネストすることができます。 フラグメント・キャッシュはネストすることができます。つまり、キャッシュされる断片を、それ自体もキャッシュされる別の断片に入れることができます。
つまり、キャッシュされる断片を、それ自体もキャッシュされる別の断片に入れることができます。
例えば、内側のフラグメント・キャッシュにはコメントがキャッシュされており、外側のフラグメント・キャッシュには記事内容と一緒にコメントもキャッシュされている、という形です。 例えば、内側のフラグメント・キャッシュにはコメントがキャッシュされており、外側のフラグメント・キャッシュには記事内容と一緒にコメントもキャッシュされている、という形です。
以下のコードは 2 つのフラグメント・キャッシュをネストする方法を示すものです。 以下のコードは 2 つのフラグメント・キャッシュをネストする方法を示すものです。
@ -142,13 +147,16 @@ if ($this->beginCache($id1)) {
フラグメント・キャッシュを使用する際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇するでしょう。 フラグメント・キャッシュを使用する際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇するでしょう。
例えば、ページのヘッダがメイン・メニュー・バーと現在のユーザ名を一緒に表示している場合です。 例えば、ページのヘッダがメイン・メニュー・バーと現在のユーザ名を一緒に表示している場合です。
もう一つの問題は、キャッシュされるコンテントに、リクエスト毎に実行しなければいけない PHP のコード (例えば、アセット・バンドルを登録するためのコード) が含まれている場合です。 もう一つの問題は、キャッシュされるコンテントに、リクエスト毎に実行しなければいけない PHP のコード
(例えば、アセット・バンドルを登録するためのコード) が含まれている場合です。
この両方の問題は、いわゆる *ダイナミック・コンテント* 機能によって解決することができます。 この両方の問題は、いわゆる *ダイナミック・コンテント* 機能によって解決することができます。
ダイナミック・コンテントは、それがフラグメント・キャッシュの中に含まれていても、キャッシュすべきではない出力の部分を意味します。 ダイナミック・コンテントは、それがフラグメント・キャッシュの中に含まれていても、キャッシュすべきではない出力の部分を意味します。
このコンテントを常に動的にするためには、外側のコンテントがキャッシュから提供されている場合でも、すべてのリクエストに対して、何らかの PHP コードを実行することにより生成しなければいけません。 このコンテントを常に動的にするためには、外側のコンテントがキャッシュから提供されている場合でも、
すべてのリクエストに対して、何らかの PHP コードを実行することにより生成しなければいけません。
ダイナミック・コンテントを目的の場所に挿入するには、以下のように、キャッシュされる断片内で [[yii\base\View::renderDynamic()]] を呼び出します。 ダイナミック・コンテントを目的の場所に挿入するには、以下のように、キャッシュされる断片内で
[[yii\base\View::renderDynamic()]] を呼び出します。
```php ```php
if ($this->beginCache($id1)) { if ($this->beginCache($id1)) {

40
docs/guide-ja/caching-http.md

@ -1,9 +1,11 @@
HTTP キャッシュ HTTP キャッシュ
=============== ===============
これまでのセクションで説明したサーバ・サイドのキャッシュに加えて、ウェブ・アプリケーションは、同じページ・コンテントを生成し送信する時間を節約するために、クライアント・サイドでもキャッシュを利用することができます。 これまでのセクションで説明したサーバ・サイドのキャッシュに加えて、ウェブ・アプリケーションは、
同じページ・コンテントを生成し送信する時間を節約するために、クライアント・サイドでもキャッシュを利用することができます。
クライアント・サイドのキャッシュを使用するには、レンダリング結果をキャッシュできるように、コントローラ・アクションのフィルタとして [[yii\filters\HttpCache]] を設定します。 クライアント・サイドのキャッシュを使用するには、レンダリング結果をキャッシュできるように、
コントローラ・アクションのフィルタとして [[yii\filters\HttpCache]] を設定します。
[[yii\filters\HttpCache]] は `GET``HEAD` リクエストに対してのみ動作し、それらのリクエストに対する 3 種類のキャッシュ関連の HTTP ヘッダを扱うことができます: [[yii\filters\HttpCache]] は `GET``HEAD` リクエストに対してのみ動作し、それらのリクエストに対する 3 種類のキャッシュ関連の HTTP ヘッダを扱うことができます:
* [[yii\filters\HttpCache::lastModified|Last-Modified]] * [[yii\filters\HttpCache::lastModified|Last-Modified]]
@ -49,7 +51,8 @@ public function behaviors()
上記のコードは `index` アクションでのみ HTTP キャッシュを有効にすべきことを記述しています。 上記のコードは `index` アクションでのみ HTTP キャッシュを有効にすべきことを記述しています。
`Last-Modified` は、投稿の最終更新時刻に基づいて生成される必要があります。 `Last-Modified` は、投稿の最終更新時刻に基づいて生成される必要があります。
ブラウザが初めて `index` ページにアクセスしたときは、ページはサーバ上で生成されブラウザに送信されます。 ブラウザが初めて `index` ページにアクセスしたときは、ページはサーバ上で生成されブラウザに送信されます。
もしブラウザが再度同じページにアクセスし、その期間中に投稿に変更がない場合は、サーバはページを再生成せず、ブラウザはクライアント・サイドにキャッシュしたものを使用します。 もしブラウザが再度同じページにアクセスし、その期間中に投稿に変更がない場合は、サーバはページを再生成せず、
ブラウザはクライアント・サイドにキャッシュしたものを使用します。
その結果、サーバ・サイドのレンダリング処理とページ・コンテントの送信は両方ともスキップされます。 その結果、サーバ・サイドのレンダリング処理とページ・コンテントの送信は両方ともスキップされます。
@ -60,7 +63,8 @@ public function behaviors()
サーバ・サイドで生成されたハッシュとクライアント・サイドで保持しているハッシュを比較することによって、ページが変更されたかどうか、そして再送信するべきかどうかを決定します。 サーバ・サイドで生成されたハッシュとクライアント・サイドで保持しているハッシュを比較することによって、ページが変更されたかどうか、そして再送信するべきかどうかを決定します。
`ETag` ヘッダの送信を有効にするには [[yii\filters\HttpCache::etagSeed]] プロパティを設定します。 `ETag` ヘッダの送信を有効にするには [[yii\filters\HttpCache::etagSeed]] プロパティを設定します。
プロパティは ETag のハッシュを生成するためのシードを返す PHP のコーラブルで、以下のようなシグネチャを持たなければなりません。 プロパティは ETag のハッシュを生成するためのシードを返す PHP のコーラブルで、
以下のようなシグネチャを持たなければなりません。
```php ```php
/** /**
@ -92,20 +96,28 @@ public function behaviors()
上記のコードは `view` アクションでのみ HTTP キャッシュを有効にすべきことを記述しています。 上記のコードは `view` アクションでのみ HTTP キャッシュを有効にすべきことを記述しています。
`Etag` HTTP ヘッダは、リクエストされた投稿のタイトルとコンテントに基づいて生成されなければなりません。 `Etag` HTTP ヘッダは、リクエストされた投稿のタイトルとコンテントに基づいて生成されなければなりません。
ブラウザが初めて `view` ページにアクセスしたときは、ページがサーバ上で生成されブラウザに送信されます。 ブラウザが初めて `view` ページにアクセスしたときは、ページがサーバ上で生成されブラウザに送信されます。
ブラウザが再度同じページにアクセスし、投稿のタイトルやコンテントに変更がない場合には、サーバはページを再生成せず、ブラウザはクライアント・サイドにキャッシュしたものを使用します。 ブラウザが再度同じページにアクセスし、投稿のタイトルやコンテントに変更がない場合には、
サーバはページを再生成せず、ブラウザはクライアント・サイドにキャッシュしたものを使用します。
その結果、サーバ・サイドのレンダリング処理とページ・コンテント送信は両方ともスキップされます。 その結果、サーバ・サイドのレンダリング処理とページ・コンテント送信は両方ともスキップされます。
ETag は `Last-Modified` ヘッダよりも複雑 かつ/または より正確なキャッシング方式を可能にします。例えば、サイトが別のテーマに切り替わった場合には ETag を無効化する、といったことができます。 ETag は `Last-Modified` ヘッダよりも複雑 かつ/または より正確なキャッシング方式を可能にします。
例えば、サイトが別のテーマに切り替わった場合には ETag を無効化する、といったことができます。
ETag はリクエスト毎に再評価する必要があるため、負荷の高い生成方法を使うと `HttpCache` の本来の目的を損なって不必要なオーバーヘッドが生じる場合があります。 ETag はリクエスト毎に再評価する必要があるため、負荷の高い生成方法を使うと `HttpCache`
の本来の目的を損なって不必要なオーバーヘッドが生じる場合があります。
ページのコンテントが変更されたときにキャッシュを無効化するための式は単純なものを指定するようにして下さい。 ページのコンテントが変更されたときにキャッシュを無効化するための式は単純なものを指定するようにして下さい。
> Note: [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4) に準拠して `Etag``Last-Modified` ヘッダの両方を設定した場合、`HttpCache` はその両方とも送信します。また、もし `If-None-Match` ヘッダと `If-Modified-Since` ヘッダの両方を送信した場合は前者のみが尊重されます。 > Note: [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4) に準拠して
`Etag``Last-Modified` ヘッダの両方を設定した場合、
`HttpCache` はその両方とも送信します。 また、もし `If-None-Match` ヘッダと
`If-Modified-Since` ヘッダの両方を送信した場合は前者のみが尊重されます。
## `Cache-Control` ヘッダ <span id="cache-control"></span> ## `Cache-Control` ヘッダ <span id="cache-control"></span>
`Cache-Control` ヘッダはページのための一般的なキャッシュ・ポリシーを指定します。 `Cache-Control` ヘッダはページのための一般的なキャッシュ・ポリシーを指定します。
[[yii\filters\HttpCache::cacheControlHeader]] プロパティにヘッダの値を設定することで、それを送ることができます。デフォルトでは、以下のヘッダが送信されます: [[yii\filters\HttpCache::cacheControlHeader]] プロパティにヘッダの値を設定することで、それを送ることができます。
デフォルトでは、以下のヘッダが送信されます:
``` ```
Cache-Control: public, max-age=3600 Cache-Control: public, max-age=3600
@ -113,15 +125,19 @@ Cache-Control: public, max-age=3600
## セッション・キャッシュ・リミッタ<span id="session-cache-limiter"></span> ## セッション・キャッシュ・リミッタ<span id="session-cache-limiter"></span>
ページでセッションを使用している場合、PHP はいくつかのキャッシュ関連の HTTP ヘッダ (PHP の INI 設定ファイル内で指定されている session.cache_limiter など) を自動的に送信します。 ページでセッションを使用している場合、PHP はいくつかのキャッシュ関連の HTTP ヘッダ
(PHP の INI 設定ファイル内で指定されている session.cache_limiter など) を自動的に送信します。
これらのヘッダが `HttpCache` が実現しようとしているキャッシュ機能を妨害したり無効にしたりすることがあります。 これらのヘッダが `HttpCache` が実現しようとしているキャッシュ機能を妨害したり無効にしたりすることがあります。
この問題を防止するために、`HttpCache` はこれらのヘッダの送信をデフォルトで自動的に無効化します。 この問題を防止するために、`HttpCache` はこれらのヘッダの送信をデフォルトで自動的に無効化します。
この動作を変更したい場合は [[yii\filters\HttpCache::sessionCacheLimiter]] プロパティを設定します。 この動作を変更したい場合は [[yii\filters\HttpCache::sessionCacheLimiter]] プロパティを設定します。
このプロパティには `public`、`private`、`private_no_expire`、そして `nocache` などの文字列の値を使用することができます。 このプロパティには `public`、`private`、`private_no_expire`、そして `nocache` などの文字列の値を使用することができます。
これらの値についての説明は [session_cache_limiter()](http://www.php.net/manual/ja/function.session-cache-limiter.php) を参照してください。 これらの値についての説明は [session_cache_limiter()](http://www.php.net/manual/ja/function.session-cache-limiter.php)
を参照してください。
## SEO への影響 <span id="seo-implications"></span> ## SEO への影響 <span id="seo-implications"></span>
検索エンジンのボットはキャッシュ・ヘッダを尊重する傾向があります。 検索エンジンのボットはキャッシュ・ヘッダを尊重する傾向があります。
クローラの中には、一定期間内に処理するドメインごとのページ数に制限を持っているものもあるため、キャッシュ・ヘッダを導入して、処理の必要があるページ数を減らしてやると、サイトのインデックスの作成を促進できるかも知れません。 クローラの中には、一定期間内に処理するドメインごとのページ数に制限を持っているものもあるため、
キャッシュ・ヘッダを導入して、処理の必要があるページ数を減らしてやると、サイトのインデックスの作成を促進できるかも知れません。

3
docs/guide-ja/caching-overview.md

@ -6,7 +6,8 @@
これによって、アプリケーションは、毎回一からデータを生成した場合に必要になるであろう時間を節約することができます。 これによって、アプリケーションは、毎回一からデータを生成した場合に必要になるであろう時間を節約することができます。
キャッシュはアプリケーション内のさまざまなレベルと場所で使用することができます。 キャッシュはアプリケーション内のさまざまなレベルと場所で使用することができます。
例えばサーバ・サイドでの低いレベルでは、データベースから取得した最新の記事情報リストのような基本的なデータを格納するためにキャッシュを使用することが出来ます。 例えばサーバ・サイドでの低いレベルでは、データベースから取得した最新の記事情報リストのような
基本的なデータを格納するためにキャッシュを使用することが出来ます。
より高いレベルでは、ウェブ・ページの断片または全体、例えば、最新の記事のレンダリング結果を格納するためにキャッシュを使用することが出来ます。 より高いレベルでは、ウェブ・ページの断片または全体、例えば、最新の記事のレンダリング結果を格納するためにキャッシュを使用することが出来ます。
クライアント・サイドでは、最近訪れたページの内容をブラウザのキャッシュに格納するために、HTTP キャッシュを使用することができます。 クライアント・サイドでは、最近訪れたページの内容をブラウザのキャッシュに格納するために、HTTP キャッシュを使用することができます。

7
docs/guide-ja/caching-page.md

@ -4,7 +4,8 @@
ページ・キャッシュはサーバ・サイドでページ全体のコンテントをキャッシュするものです。 ページ・キャッシュはサーバ・サイドでページ全体のコンテントをキャッシュするものです。
後で再び同じページがリクエストされた場合に、その内容を一から生成するのではなく、キャッシュから提供します。 後で再び同じページがリクエストされた場合に、その内容を一から生成するのではなく、キャッシュから提供します。
ページ・キャッシュは [[yii\filters\PageCache]] という [アクション・フィルタ](structure-filters.md) によってサポートされています。これは、コントローラ・クラスで以下のように使用することができます: ページ・キャッシュは [[yii\filters\PageCache]] という [アクション・フィルタ](structure-filters.md) によってサポートされています。
これは、コントローラ・クラスで以下のように使用することができます:
```php ```php
public function behaviors() public function behaviors()
@ -34,4 +35,6 @@ public function behaviors()
それらは両方とも `duration`、`dependencies`、`variations`、そして `enabled` などのオプションをサポートしています。 それらは両方とも `duration`、`dependencies`、`variations`、そして `enabled` などのオプションをサポートしています。
主な違いとしては、ページ・キャッシュは [アクション・フィルタ](structure-filters.md) として、フラグメント・キャッシュは [ウィジェット](structure-widgets.md) として実装されているということです。 主な違いとしては、ページ・キャッシュは [アクション・フィルタ](structure-filters.md) として、フラグメント・キャッシュは [ウィジェット](structure-widgets.md) として実装されているということです。
[フラグメント・キャッシュ](caching-fragment.md) も、[ダイナミック・コンテント](caching-fragment.md#dynamic-content) も、ページ・キャッシュと併用することができます。 [フラグメント・キャッシュ](caching-fragment.md) も、[ダイナミック・コンテント](caching-fragment.md#dynamic-content) も、
ページ・キャッシュと併用することができます。

Loading…
Cancel
Save