Cocos Creator 2.x 社区分叉版本 - Cocos Enhance Kit v2.0 发布,增加多线程支持

Cocos Enhance Kit

这是 Cocos Creator v2.x 社区分叉版本,提供了大量的新特性、性能改进与修复

未来将继续秉持着完全开源、完全兼容的理念提供新特性、优化与修复。

非常欢迎你能和我们一起来完善这个项目!

主要特性

  • 全平台兼容
  • 支持多纹理渲染
  • 支持高清文本渲染
  • 动态合图增强
  • Label 组件性能增强
  • Spine 组件性能增强
  • 支持 SpriteFrame 对 Spine 进行换装
  • 多线程支持

具体描述可前往文档查看,更新帖就不浪费时间展开讲了。

更新

距上次 Cocos Enhance Kit 的功能更新(不包括只是适配引擎版本的维护更新)已经过去了两年。

在这两年,Cocos Creator 已经从 v3.6.0 升级到了 v3.8.4 版本,v3.x 在大多数方面均已超过 v2.x 版本,但对于本项目主要解决的 2D 性能问题几乎看不到变化。

所以除了还在使用 v2.x 的老项目外,使用本社区分叉版本开发新的 2D 项目在性能上还是具有一定的优势,也省心许多。

当然,要推荐的话,还是推荐你直接选择 v3.x 版本。

说回到这次 v2.0.0 版本的更新,除了适配最新的 v2.4.13 引擎版本、修复了些许问题外,我们还对引擎在微信小游戏平台上的多线程支持进行了尝试。

由于我们公司还存在使用 v2.x 版本的项目,在最近的一次性能分析时,发现在微信小游戏上,对 wx 接口的调用有大量的耗时。

比如微信的网络和文件系统接口,因为是异步实现的,所以预想中调用它的耗时应该不会很高,但是在低端机中的性能分析显示,每次调用都高达 3 - 6ms 左右!要知道渲染主循环的总耗时也就在平均 9ms 左右。

这会导致即使我们只是预加载资源也依然会导致卡顿,所以要想办法降低这部分的耗时。

经过四处查找,发现虽然在微信小游戏平台的文档中提到,Worker 是不支持任何 wx 接口的,但是在某次微信基础库的更新公告里有提到 Worker 支持了文件系统、网络和音频接口。

在与微信官方人员的不断沟通和实机测试后,得出以下结论:

  • Android 系统下 Worker 与公告描述的一致,支持以上三种接口,并且还支持使用 SharedArrayBuffer!
  • Windows、Mac、iOS 系统下的 Worker 暂时还存在问题,仅文件系统接口可以正常使用,其余接口虽然存在,但调用无响应。

既然微信小游戏平台对这些关键接口进行了支持,那我们就想把它利用上,对引擎进行一次多线程改造。

我们首先对引擎的资源管线下手,将下载和缓存部分移至了 Worker 线程执行,得出的效果如下:

可以看到红框部分执行下载文件接口的性能消耗消失了,优化后的资源加载流程中只有资源的解析会占用主线程了。

对于资源解析这部分,我们尝试过将其移至 Worker 线程,但由于线程间通信消耗而暂时放弃。

现在,我们把这项优化整合进了 Enhance Kit 中,欢迎试用交流。

演示

Web Desktop

Web Mobile(请将设备横屏)

链接

官方网站

文档

Github

赞助/付费扩展

支持我们

社区版的开发需要大量的工作来进行,你的支持是我们最大的动力:

  • 请给我们的项目仓库一个 Star
  • 购买可有可无的一键安装扩展以赞助我们!
17赞

你这个椰子头还是个帅比啊

今天更新了 v2.1.0 版本:

  • [新特性] 增加音频系统的多线程支持
  • [新特性] 增加英文多语言支持
  • [优化] 优化 Worker Handlers 初始化的时机
  • [优化] 多线程内的网络、音频调用启用高性能模式,并支持 Http2、Quic/Http3
  • [修复] 修复 Worker 主动向主线程通信无效的问题
  • [修复] 修复资源未缓存成功的问题
  • [修复] 修复宏的一些问题

音频系统的多线程化的效果如下:

(优化前)

(优化后)

可以看到每次播放音频的耗时从 7.5ms 降低至 0.6ms。

2赞

:cowboy_hat_face: From AI

你是我的神!!! :raising_hand_man:

确实强:+1:

这么快?摸鱼?

注意如果是使用商城的扩展,请看是否为 v2.1.1 版本,旧版本有问题暂时不要下载安装,新版本正在等待审核。

此言差矣,首先我不喜欢快这个字,其次我来论坛是学的技术的 :dog:

更新了商城的扩展,修复了安装时导致的一些文件找不到的问题,新版本正在等待审核。

帅哟帅帅帅帅帅帅

不过我实际测了一下,创建大量spine,dc没增,但帧率还是会降 :upside_down_face:

Spine 的 CPU 计算的性能消耗非常高,你的项目的性能瓶颈可能已经不在 dc 了。

特别是 Realtime 模式的性能消耗非常高,建议使用 Spine 缓存模式。

更新 v2.2.0 版本:

  • [新特性] 支持自定义项目多线程扩展

现在,你只需要几行代码即可快速创建自定义多线程扩展,将项目逻辑移至 Worker 线程中执行,避免阻塞主线程!

// worker.js:
const { registerHandler } = require("ipc-worker.js");

export function add(x, y, callback) {
    callback(x + y);
}

registerHandler("math", {
    add,
});

// 在主线程中:
worker.math.add([1, 2], ([v]) => {
    console.log('Worker math add result:', v);
});

详情请查看 多线程扩展文档

问问 有人用这个实际做项目应用的吗 稳定性有结论吗

这个项目已经持续更新了三年多。

初始版本就用在我们公司项目上使用至今,直到现在公司几乎所有 cocos 项目都在用了。

而且,我们秉持着完全兼容的理念进行开发,这不是引擎升级,升完就降不回去,你可以随时切换回官方版本的引擎。

所以你可以进行充分测试之后再全量推送新版本。

大佬,请问下creator版本要跟你这个版本一一对应吗
譬如在用creator2.4.3 该用你这个增强套件的哪个版本?

v2.2.0 Latest
适配 Cocos Creator v2.4.13 版本

意思是最高支持2.4.13 还是只支持2.4.13?

需要一一对应的,太低版本的话就不能直接使用了。

了解~ 项目已上线,不好升版本
只能抽部分功能魔改使用 :rofl:

:+1: :+1: :+1: :+1: :+1: