版本:Unity 6 (6000.0)
语言:英语
Unity Web 中的内存
Web 图形

Web 中的缓存行为

在 Unity Web 平台中,缓存 API一个 JavaScript API,用于将网络请求和响应对存储在浏览器缓存中。 更多信息
参见 词汇表
允许您将存储在 .data 文件和 AssetBundles 中的资源数据缓存在浏览器缓存中。 浏览器缓存的存储限制(如最大文件大小、最大总缓存大小和驱逐标准)取决于您使用的浏览器和平台。 有关更多信息,请参见 浏览器存储限制和驱逐标准.

数据缓存

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

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

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

数据缓存仅将 .data 文件缓存到 IndexedDB 缓存中以用于 HTTP 响应。 要缓存 AssetBundles,您需要启用数据缓存并覆盖 unityInstance.Module.cacheControl()。 为此,请确保 Module.cacheControl(url) 为请求的 AssetBundle URL 返回 must-revalidate。 例如,您可以在 createUnityInstance() 返回的 Promise 的执行回调中覆盖 unityInstance.Module.cacheControl() 函数。 有关 createUnityInstance() 的更多信息,请参见 压缩构建和服务器配置.

自定义 Web 缓存行为

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

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

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,则缓存将恢复到已启用状态,并且在从缓存中加载文件之前将重新验证该文件。

  • immutable - 如果函数返回 immutable您无法更改不可变(只读)包的内容。 这是 可变 的反义词。 大多数包都是不可变的,包括从包注册表或通过 Git URL 下载的包。
    参见 词汇表
    ,则缓存已启用,并且文件将从缓存中加载而无需重新验证。

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

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

Unity Web 中的内存
Web 图形