creator 2.4.15 优化后打包速度从30分钟提速到5分钟

我creator2.x 项目原来200多个bundle
creator2.x 项目bundle包越多打包越慢
这项目200bundle打包原来需要30多分钟
一怒之下叫ai把编辑器底裤扒干净,把性能问题修修,现在打包速度提高到5分钟
舒服。。。下面图是优化后打包速度
20261019115650_rec_

打包最大性能开销是在自动图集功能里(initTexturePacker)
下面是性能优化日记

Cocos Creator 2.4.15 构建性能优化记录

适用范围:针对项目内 bundle 数量多(数百个)导致构建极慢的问题。


一、问题背景

  • 项目 bundle 数量多,即使空 bundle 也会拖慢构建。
  • 优化前:每个 bundle 构建至少 10+ 秒,CPU 占用低(大量时间耗在等待/串行上)。

二、优化内容(按轮次)

第 1 轮:消除空 bundle 与重复查询的固定开销

# 文件 修改
1 editor/core/gulp-build.js query-bundles 任务新增 _emptyCheck:一次 queryMetas("db://**/*", null) 统计每个 bundle 根目录有效资源数(排除 folder/javascript/typescript),bundle 条目带 hasAssets;build-assets 循环中跳过 root && !hasAssets && scenes 空 的 bundle(不发 worker、不建 buildResults)。fail-safe:统计失败时所有 bundle 视为有资源,保持原行为
2 editor/core/gulp-build.js revision-asset-jsList:zip bundle 缺 res.zip(空 bundle)时不再 renameSync 崩溃,改为 warn + 跳过;compress-bundles 始终生成 res.zip(空 bundle 生成空 zip),防止运行时对 isZip bundle 无条件下载 res.zip 导致 404
3 editor/page/build/build-worker.js db://**/*.pac 全库查询结果缓存到模块级 _pacQueryCache,每次构建 app:init-build-worker 时清空
4 editor/page/build/compile-worker.js 无脚本 bundle 跳过 browserify/uglify:_writeEmptyBundle 用一次空 browserify 运行缓存输出(合法空输出 = prelude + ({},{},[]);)直接写 index.js;写入失败时回退原流程
5 editor/share/bundle-utils.js queryBundlesWithScenes(preFolders) 支持传入已查文件夹列表,消除 query-bundles 里的重复全库查询(其他调用方无参调用,向后兼容)

安全性审计结论(第 4 轮复查)

  • 修复 1 挂起风险不成立:queryBundleFolders 更早 await 同一 assetdb,assetdb 不可用时构建先挂在那里;回调错误 → fail-safe 兜底。
  • 修复 2 关键事实:引擎 getRect() 返回 cc.rect(this._rect) 拷贝(非引用),packer 写 trim 坐标不污染共享的 SpriteFrame 实例;frame.pacInfo 反向引用全库无读取点;cc.js.mixin(目标, meta) 不改 meta;build worker 窗口每次构建新建 → 缓存生命周期 = 单次构建,不会跨构建陈旧。
  • 既有行为澄清:temp/TexturePacker/build/<pac>/info.json 跨 bundle 共享,靠 mtimes 键集(含 frame uuid 列表)判断复用——不同 bundle 过滤后 frame 集不同则键集不同 → 重算,属原版行为。

三、实测效果

指标 优化前 优化后
initTexturePacker 每 bundle ~6s 仅首个 bundle ~6s,后续 ~0ms
queryPac 每 bundle ~3s 仅首个 bundle ~3s
同组重复依赖构建 每个 bundle 全量闭包 redirect 复用 已回退,恢复官方行为
空 bundle 全量走完资产构建+编译 直接跳过(不发 worker、不编译)
产物体积 依赖在每个 bundle 复制 redirect 去重 已回退,恢复官方行为

Cocos Creator 2.4.15 构建性能优化补丁 — 安装说明

补丁形式:文件覆盖。基于 Cocos Creator 2.4.15 官方原版修改,其他版本不保证兼容。
安装完成后,构建多 bundle 工程的速度会有明显提升(空 bundle 跳过、图集/pac 查询缓存等),
并新增构建耗时统计([perf] 日志)。


一、补丁内容

app补丁.zip (45.1 KB)

_app/                                            ← 本目录(对应 app/ 根目录)
├── editor/core/gulp-build.js                    构建主编排(空bundle跳过、perf统计等)
├── editor/page/build/build-worker.js            资产构建 worker(pac查询缓存)
├── editor/page/build/compile-worker.js          脚本编译 worker(无脚本bundle跳过编译)
├── editor/page/build/texture-packer/index.js    图集查询跨bundle缓存
├── editor/share/bundle-utils.js                 消除重复全库查询
├── 补丁安装说明.md                               ← 本文档
├── 构建性能优化记录.md                           ← 改动明细与事故记录(建议阅读)
└── 构建与运行时Bundle解析原理.md                 ← 构建产物与运行时加载原理(供查阅)

三、安装步骤

以下命令均在终端执行,CC 代指 Creator 安装路径,请先替换:

CC="/Applications/Cocos/Creator/2.4.15/CocosCreator.app/Contents/Resources"

Windows 同理,路径形如 D:\Cocos\Creator\2.4.15\CocosCreator\resources。
需要已安装 Node.js(用于解包 asar)。

0. 关闭 Cocos Creator,并备份

cp "$CC/app.asar" "$CC/app.asar.bak"

1. 解包 app.asar 为 app/ 目录

cd "$CC"
npx @electron/asar extract app.asar app
# 若 npx @electron/asar 不可用,可试旧包名:npx asar extract app.asar app

2. 合并原生模块(关键,勿漏)

app.asar.unpacked/ 里是打包时被排除的原生模块,解包工具不会自动带出,必须并入:

cp -R "$CC/app.asar.unpacked/node_modules/." "$CC/app/node_modules/"

3. 覆盖补丁文件

把本压缩包(app.zip)解压,将得到的 app 目录里的全部内容按相对路径合并进 app/:

unzip app.zip -d /tmp/cc_patch          # 解压补丁包
cp -R /tmp/cc_patch/app/. "$CC/app/"   # 注意 /. 结尾:合并目录内容

4. 启动 Cocos Creator

app/ 目录优先级高于 app.asar,补丁自动生效。app.asar(和 .bak)留着不碍事,
想保持环境干净也可以改名或移走。

四、验证

  1. 打开一个含较多 bundle 的工程,点构建。
  2. 构建日志中应出现 [perf] task [...] / Build Perf Summary 字样(优化新增的耗时统计)。
  3. 构建产物正常:游戏可运行、bundle 齐全(若曾经配置过远程 bundle,建议对比一次产物)。

五、回滚

rm -rf "$CC/app"
mv "$CC/app.asar.bak" "$CC/app.asar"    # 若当时改过名

重启 Creator 即恢复原版。

原理(为什么必须先解包 asar)

Electron(Creator 的运行框架)按以下顺序选择应用代码根目录,第一个能成功加载 package.json 的胜出:

Resources/app/(目录) > Resources/app.asar > Resources/default_app.asar

app/ 目录一旦存在,整个应用都从它加载,app.asar 被完全忽略——这是"整根替换",
不是文件级覆盖。所以不能只把补丁文件拷成 app/ 目录(会缺 main.js、node_modules 等,
编辑器无法启动),必须先把 app.asar 完整解包成 app/ 目录,再覆盖补丁文件。

六、常见问题

  • npx 命令不存在:先安装 Node.js(https://nodejs.org),或使用任意 asar 解包工具。
  • 启动报错缺模块(如 lzma-native):第 2 步没做或没做完,重新合并 app.asar.unpacked。
  • 构建行为和预期不符:确认对方 Creator 版本为 2.4.15($CC/app/package.json 的 version 字段)。
4赞

你这不是扒编辑器底裤,你是扒程序员的底裤 :joy:

底不底裤的, creator 2.4.15 优化后摸鱼时间从30分钟缩短到5分钟

1赞

COCOS 各种功能的效率,都是最差的,渲染 打包 缓存 加载,都很低

感谢分享,可以把修改后的具体改动分享一下吗?

官方没开源编辑器,我也不敢放源码,晚点搞个补丁插件

古法编程时代的泪水

好的 ,谢谢,好人一生平安!

摸的有点烧心怎么回事

哦豁,我三十分钟的摸鱼时间被你减到了五分钟

补丁放上去了,你试试看速度

干等太烧心

官方还是开源编辑器吧,那点加密代码又有什么用,一堆要优化的东西只能绕着修 :face_with_monocle:

看到了 谢谢~~

现在只要不是联网的软件,底裤随便扒