diff --git a/README.md b/README.md index f924fd10..dae7b18d 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,17 @@ Label 一直是项目优化的最难点,因为它完全不能和其它的渲 ### 多线程支持 -现在,引擎的部分系统增加了多线程支持,启用后可以释放其对主线程的占用,减少卡顿现象。 +现在,以下引擎的部分增加了多线程支持: + +- 资源管线(下载与缓存部分) +- 音频系统 + +启用后可以释放其对主线程的占用,减少卡顿现象。 + +并且在微信小游戏平台下还有以下改进: + +- 默认启用网络接口和音频接口的高性能模式 +- 网络接口支持 HTTP/2、HTTP/3(QUIC) 协议 ## 演示 diff --git a/docs/docs/best-practices/performance-guide.md b/docs/docs/best-practices/performance-guide.md index 96473a87..751b3c16 100644 --- a/docs/docs/best-practices/performance-guide.md +++ b/docs/docs/best-practices/performance-guide.md @@ -100,6 +100,16 @@ Spine 组件现在不仅可以参与动态合图,还能与其他渲染组件 ## 启用多线程支持 -社区版为引擎的部分系统增加了多线程支持,启用后可以释放其对主线程的占用,减少卡顿现象。 +现在,以下引擎的部分增加了多线程支持: + +- 资源管线(下载与缓存部分) +- 音频系统 + +启用后可以释放其对主线程的占用,减少卡顿现象。 + +并且在微信小游戏平台下还有以下改进: + +- 默认启用网络接口和音频接口的高性能模式 +- 网络接口支持 HTTP/2、HTTP/3(QUIC) 协议 详情请阅读文档:[多线程支持](../user-guide/multithread/thread-intro)。 diff --git a/docs/docs/breaking-change.md b/docs/docs/breaking-change.md index 6418545c..6f9efa88 100644 --- a/docs/docs/breaking-change.md +++ b/docs/docs/breaking-change.md @@ -79,3 +79,14 @@ cc.macro.ENABLE_NATIVE_TTF_RENDERER = false; - `getTemp` 方法被 `getTempAsync` 方法代替,请检查你项目中相关的用法。 - 启用多线程之后,会使用多线程版的缓存管理器,如果你的项目访问了未暴露的内部属性,请检查相关的用法。 + +### 音频系统 + +当你启用多线程驱动音频系统时,以下音频属性是定时更新而不是即时更新的: + +- `duration` +- `currentTime` + +这一般不会引起什么问题,无需特别关注。 + +如果你正在操作引擎内部维护的平台音频实例的话,需要注意现在的平台音频实例每个事件只支持有一个监听者(普通用户无需关注,AudioSource、CCAudio 等面向用户的 API 依然支持多个监听者)。 diff --git a/docs/docs/intro.md b/docs/docs/intro.md index ddfa0b83..cb316ae6 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -96,7 +96,17 @@ Label 一直是项目优化的最难点,因为它完全不能和其它的渲 ### 多线程支持 -现在,引擎的部分系统增加了多线程支持,启用后可以释放其对主线程的占用,减少卡顿现象。 +现在,以下引擎的部分增加了多线程支持: + +- 资源管线(下载与缓存部分) +- 音频系统 + +启用后可以释放其对主线程的占用,减少卡顿现象。 + +并且在微信小游戏平台下还有以下改进: + +- 默认启用网络接口和音频接口的高性能模式 +- 网络接口支持 HTTP/2、HTTP/3(QUIC) 协议 ## 使用方法 diff --git a/docs/docs/user-guide/multithread/assets/tas-a.png b/docs/docs/user-guide/multithread/assets/tas-a.png new file mode 100644 index 00000000..d9a77455 Binary files /dev/null and b/docs/docs/user-guide/multithread/assets/tas-a.png differ diff --git a/docs/docs/user-guide/multithread/assets/tas-a2.png b/docs/docs/user-guide/multithread/assets/tas-a2.png new file mode 100644 index 00000000..d86b7f96 Binary files /dev/null and b/docs/docs/user-guide/multithread/assets/tas-a2.png differ diff --git a/docs/docs/user-guide/multithread/thread-asset-pipeline.md b/docs/docs/user-guide/multithread/thread-asset-pipeline.md index d4198746..d374e6d4 100644 --- a/docs/docs/user-guide/multithread/thread-asset-pipeline.md +++ b/docs/docs/user-guide/multithread/thread-asset-pipeline.md @@ -15,4 +15,4 @@ description: "在多线程中执行资源管线。" 这是在 Android 设备上,对游戏帧耗时的分析图,可以看到红框部分的消耗消失了,降低了每帧的耗时。 -在启用后,会有一些接口与之前不一样,请前往 [破坏性变更](../../breaking-change#资源管线) 查看详情。 +在启用资源管线的多线程支持后,会有一些接口差异,请前往 [破坏性变更](../../breaking-change#资源管线) 查看详情。 diff --git a/docs/docs/user-guide/multithread/thread-audio-system.md b/docs/docs/user-guide/multithread/thread-audio-system.md index ecb8e04d..ead5f783 100644 --- a/docs/docs/user-guide/multithread/thread-audio-system.md +++ b/docs/docs/user-guide/multithread/thread-audio-system.md @@ -7,10 +7,26 @@ description: "在多线程中操作音频。" 依次点击编辑器的菜单项 **项目 - 社区版设置**,然后勾选 **多线程驱动音频系统**,即可启用这一特性。 -启用后,音频的所有操作都会在 Worker 线程中执行,完全释放对主线程的占用。 +启用后,针对音频的所有操作都会在 Worker 线程中执行,完全释放对主线程的占用。 -:::danger 注意 +下面是在 Android 设备上,在开启前对游戏帧耗时的分析图: -该特性正在开发中,请勿启用。 +![analysis](./assets/tas-a.png) -::: +下面是开启多线程支持后: + +![analysis-2](./assets/tas-a2.png) + +可以看到每次播放音频的耗时从 7.5ms 降低至 0.6ms。 + +## 调整属性同步间隔 + +启用多线程支持后,音频实例运行在 Worker 线程中,所以音频属性是定时同步更新到主线程的。 + +默认情况下,间隔时间为 `500` 毫秒,其实大部分项目都不会读取音频属性,而是直接监听播放开始、播放结束等音频事件(无论如何,事件是立即发出的)。 + +所以我们可以适当地降低同步频率,优化项目的性能。 + +依次点击编辑器的菜单项 **项目 - 社区版设置**,然后修改 **属性同步间隔** 的值即可。 + +在启用音频系统的多线程支持后,会有一些接口差异,请前往 [破坏性变更](../../breaking-change#音频系统) 查看详情。 diff --git a/docs/docs/user-guide/multithread/thread-intro.mdx b/docs/docs/user-guide/multithread/thread-intro.mdx index 3604e371..01741b43 100644 --- a/docs/docs/user-guide/multithread/thread-intro.mdx +++ b/docs/docs/user-guide/multithread/thread-intro.mdx @@ -7,6 +7,11 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; 以下所有多线程特性暂时仅适用于微信小游戏平台。 +并且在微信小游戏平台下还有以下改进: + +- 默认启用网络接口和音频接口的高性能模式 +- 网络接口支持 HTTP/2、HTTP/3(QUIC) 协议 + ::: 社区版为引擎的部分系统增加了多线程支持,启用后可以释放其对主线程的占用,减少卡顿现象。