Version: 6000.3
语言: 中文
Unity Web 中的内存
Web 图形 API

Web 中的缓存行为

在 Unity Web 平台中,缓存 API一种 Javascript API,用于在浏览器缓存中存储网络请求和响应对。更多信息
请参阅术语表
允许您存储缓存在.data浏览器缓存中的文件和 AssetBundle。浏览器缓存的存储限制(例如最大文件大小、最大总体缓存大小和逐出条件)取决于您使用的浏览器和平台。有关详细信息,请参阅浏览器存储限制和逐出条件

数据缓存

要访问数据缓存,请从文件>构建配置文件>播放器设置打开 Web 的发布设置。这使浏览器能够将主数据文件缓存到 IndexedDB 数据库中。

使用默认浏览器 HTTP 缓存并不能保证浏览器缓存特定响应。这是因为浏览器 HTTP 缓存的空间有限,浏览器可能无法缓存太大的文件。

为了提高加载速度,IndexedDB允许您缓存超过浏览器限制的文件。缓存更多文件时,下载的内容在下次运行生成期间在用户计算机上可用的机会就会增加。

数据缓存仅缓存.dataIndexedDB 缓存中的文件用于 HTTP 响应。要缓存资产包,你需要启用数据缓存并覆盖unityInstance.Module.cacheControl(). 为此,请确保Module.cacheControl(url)返回must-revalidate为请求的 AssetBundle URL。例如,您可以覆盖unityInstance.Module.cacheControl()函数 在 Promise 的履行回调中,该函数createUnityInstance()返回。 有关更多信息createUnityInstance(),请参阅压缩版本和服务器配置

自定义 Web 缓存行为

默认情况下,Web 缓存存储资产数据文件.data和 AssetBundle 文件.bundle,并在从缓存加载它们之前重新验证它们。您可以通过添加更改 UnityLoader 配置的新 Web 模板来更改此行为。

以下示例显示了将自定义 cacheControl 函数添加到 UnityLoader 配置中的index.html文件。

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
   // ...
}

cacheControlfunction 将请求的 URL 作为参数,并返回以下内容之一:

  • must-revalidate- 如果函数返回 must-revalidate,则缓存将返回到启用状态,并且在从缓存加载之前重新验证文件。

  • immutable- 如果函数返回不可变 不能更改不可变(只读)包的内容。这与可变相反。大多数包都是不可变的,包括从包注册表或通过 Git URL 下载的包。
    请参阅术语表
    ,则启用缓存,并且从缓存加载文件而无需重新验证。

  • no-store- 如果函数返回no-store,则禁用缓存。

浏览器会自动存储(缓存)某些文件类型,例如 .html、.js、.css、.json、.jpg .png,因此它们不需要显式存储在 Web 缓存中。Web 缓存的典型候选项包括大型文件和使用自定义文件格式的文件。

Unity Web 中的内存
Web 图形 API