# ウェブのキャッシュ動作

> Customize the Web cache behavior.

Unity Web プラットフォームでは、キャッシュ API を使用して、`.data` ファイルや[アセットバンドル](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-bundles-intro.md)にキャッシュされたアセットデータをブラウザーキャッシュ保存できます。最大ファイルサイズ、キャッシュ全体の最大サイズ、および削除基準などのブラウザーキャッシュのストレージ制限は、使用しているブラウザーとプラットフォームによって異なります。詳細については、[ブラウザーのストレージ制限と削除基準](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria)を参照してください。

## データキャッシング##data-caching

**データキャッシング**にアクセスするには、ウェブで **Publishing Setings** を開きます (**File** > **Build Settings** > **Player Settings** を選択します)。これにより、ブラウザーはメインデータファイルを IndexedDB データベースにキャッシュすることができます。

ブラウザーのデフォルトの HTTP キャッシュを使用しても、ブラウザーが特定の応答をキャッシュすることを保証するものではありません。これは、ブラウザーの HTTP キャッシュの容量が限られており、大きすぎるファイルをキャッシュできない可能性があるためです。

ロードの速度を向上させるために、`IndexedDB` ではブラウザーの制限を超えるファイルをキャッシュすることができます。より多くのファイルをキャッシュすると、ダウンロードしたコンテンツが次回のビルド実行時にユーザーのマシンで利用可能になる可能性が高くなります。

データキャッシングは、HTTP 応答用に IndexedDB キャッシュの `.data` ファイルのみをキャッシュします。[AssetBundle](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-bundles-intro.md) をキャッシュするには、データキャッシュを有効にして、`unityInstance.Module.cacheControl()` をオーバーライドする必要があります。これを行うには、`Module.cacheControl(url)` が、要求された AssetBundle URL に対して `must-revalidate` を返すようにします。例えば、`createUnityInstance()` が返す Promise のフルフィルメントコールバックで `unityInstance.Module.cacheControl()` 関数をオーバーライドできます。`createUnityInstance()` の詳細については、[圧縮されたビルドとサーバーの設定](/engine/6000.0/manual/platform-specific/webgl/building-distribution/deploying.md)を参照してください。

## ウェブキャッシュの動作をカスタマイズする##customize-web-cache-behavior

デフォルトでは、ウェブキャッシュはアセットデータファイル `.data` と、AssetBundle ファイル `.bundle` を保存し、キャッシュからロードする前にこれらのファイルを再検証します。この動作を変更するには、UnityLoader の設定を変更する新しい [Web テンプレート](/engine/6000.0/manual/platform-specific/webgl/building-distribution/templates.md)を追加します。

以下の例は、`index.html` ファイル内の UnityLoader 設定にカスタム cacheControl 関数を追加する例を示しています。

```
var config = {
   // ...
#if USE_DATA_CACHING
   cacheControl: function (url) {
     // Caching enabled for .data and .bundle files.
     // Revalidate if file is up to date before loading from cache
     if (url.match(/\.data/) || url.match(/\.bundle/)) {
         return "must-revalidate";
     }

     // Caching enabled for .mp4 and .custom files
     // Load file from cache without revalidation.
     if (url.match(/\.mp4/) || url.match(/\.custom/)) {
         return "immutable";
     }

     // Disable explicit caching for all other files.
     // Note: the default browser cache may cache them anyway.
     return "no-store";
   },
#endif
   // ...
}
```

`cacheControl` 機能は、リクエストの URL をパラメーターとして受け取り、以下のいずれかを返します。

* `must-revalidate` - この関数が [must-revalidate](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#must-revalidate) を返すとキャッシュは有効な状態に戻り、ファイルはキャッシュからロードされる前に再検証されます。

* `immutable` - この関数が [immutable](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#immutable) を返すとキャッシュは有効になり、ファイルは再検証なしでキャッシュからロードされます。

* `no-store` - この関数が [no-store](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-store) を返すと、キャッシュは無効になります。

ブラウザーは、.html、.js、.css、.json、.jpg、.png などの特定のファイルタイプを自動的に保存 (キャッシュ) するため、ウェブキャッシュに明示的に保存する必要はありません。ウェブ キャッシュの典型的な対象としては、大きなファイルやカスタムファイル形式を使用するファイルなどがあります。
