按需加载
代码按使用时机分包,Electron 安装目录仍包含完整资源,离线时从本地协议读取。
广州城市游览与合作模式共用完整地图组装和 createDistrictScene;合作入口在入房后加载既有城市场景。骑行模块按真实导入关系共享,避免把赛车模拟、驾驶舱与骑行环境强制打进城市战斗入口;Vue 的翻译运行时单独分包,未使用翻译的页面只加载 Vue 自身。启动预算仍统计城市渲染和单人权威的全部必需依赖。
| 内容 | 加载时机 |
|---|---|
| 设置面板与画面页 | 首次打开设置 |
| 声音、操作、客户端状态 | 首次切换到对应设置 Tab |
| 动作音效合成代码 | 首次启用音频;并发调用共用一次加载 |
| 音乐文件 | 实际播放所选曲目时 |
| 广州塔室内与游客碰撞世界 | 玩家在入口选择入塔时 |
| 城市后视镜与渲染缓存 | 首次打开后视镜时 |
| 车库、平台 SDK、竞速场景美术 | 沿用既有的入口 / 操作触发加载 |
音乐偏好与媒体地址独立保存。暂停期间切歌或切换昼夜只更新偏好,继续播放时使用最新选择;普通暂停保留播放进度,重开一局在播放前归零。AudioContext 在用户操作的调用栈中创建 / 恢复,之后等待音效分包,以保留浏览器音频激活条件。下载结束前销毁音频实例不会再创建音效或恢复播放。
室内下载期间重复入塔请求不会重复创建场景,加载完成后重新检查暂停、位置、游览与巡逻状态。玩家已经离开入口或暂停时,保留外部状态。设置分包失败显示重新载入操作;室内失败显示刷新提示,车辆和其他 UI 继续可用。浏览器可能缓存失败的模块请求,恢复连接后通过重新载入页面重试。
e2e/lazy-loading.spec.ts 验证实际网络请求、暂停切歌、迟到的室内 / 后视镜下载及失败恢复,可针对生产预览运行。音频单元测试覆盖并发加载、销毁期间下载、失败重试、音乐选择与节奏时钟。e2e-desktop/desktop.spec.ts 在本地协议下打开全部设置分类、后视镜与广州塔大厅,并验证全屏及重启后的文件存档。
首屏预算按入口的完整静态依赖计算,包含动态加载的必需主模块;动态场景仍需通过首次可操作时间验收。分包改变下载时机,整体大小需要另行检查。
2026-10-08 按用户授权区分网页与本地客户端预算,配置集中在 scripts/performance-budgets.mjs:
| 预算项目 | 网页 | 本地客户端 |
|---|---|---|
| 首页 / 街区入口 JS gzip | 350 KiB | 512 KiB |
| 街区加载器 JS gzip | 8 KiB | 8 KiB |
| 首页 CSS gzip | 17 KiB | 17 KiB |
| 其他入口 CSS gzip | 16 KiB | 16 KiB |
| CloudBase 分包 gzip | 210 KiB | 210 KiB |
| Rapier 分包 gzip | 1.25 MiB | 1.25 MiB |
| 音频 raw | 5.3 MiB | 64 MiB |
| 完整游戏资源 raw | 20.5 MiB | 128 MiB |
| 每架构解包应用 raw,含 Electron 与原生库 | — | 768 MiB |
pnpm verify:performance 默认使用网页预算;pnpm verify:performance:desktop 检查客户端内置游戏资源。pnpm build 生成 Web dist,pnpm verify:performance 检查其预算;pnpm desktop:build 生成独立 dist-desktop 并自动运行客户端预算与发布完整性校验;打包后 pnpm verify:desktop 再检查实际离线资源、音频与完整应用体积。macOS framework 符号链接只计一次目标文件,不把多个架构的包累加。网页总量包含全部 Web 发布资源,客户端资源总量不含 Electron;完整应用预算包含 Electron。手机限速启动门禁按阶段区分:首页按钮就绪 15 秒、比赛真实首帧 35 秒、完整街区真实首帧 60 秒;条件、依据与实际体验目标见发布验收清单。
2026-10-17 按用户授权,将网页完整游戏资源 raw 预算由 20 MiB 调整为 20.5 MiB,本地客户端 128 MiB 不变。原因是同一轮的都市夜景与 GTA 风格界面:外扩楼体窗格与楼顶灯冠、探照灯、桥体与江岸灯具、总部 LED 立面图集,以及横幅、键帽提示等共享组件进入发布脚本与样式。调整前基线已贴近上限(20.00 / 20.00 MiB,通过),本轮发布产物为 20,974,181 字节,超出 20 MiB 约 2.6 KB;没有新增媒体文件,增量全部来自代码与样式。新预算余量约 0.5 MiB;组件展示页只在 VITE_UI_GALLERY=1 的预览构建中出现,不计入发布产物。
2026-10-17 按用户授权,仅将首页 CSS gzip 预算由 16 KiB 调整为 17 KiB(homeStylesheetGzip),街区、合作、城市合作与下载入口仍为 16 KiB。原因是共享的 GTA 风格 UI 动效:tokens.css 的动效 token 与关键帧、GamePanel / GameNotice 擦入、GameButton 悬停边条及首页字标揭示同时进入首页静态 CSS。调整前基线为 15.9 KiB,余量约 80 字节;已删去首页专属的入口级联与赛事弹窗动画后,首页 CSS 为 16,591 / 16,384 字节,仍超出 207 字节。新预算余量约 0.8 KiB,后续首屏样式仍需先运行 pnpm verify:performance。合作战斗入口 JS 在本轮之前已为 350.1 / 350 KiB,本轮为 350.5 KiB,该项未调整,仍为失败项。
2026-10-08 预算调整验证:重新构建后的两套体积检查与 185 文件发布完整性检查通过;首页 / 街区入口分别为 293.3 / 304.2 KiB gzip,完整游戏资源为 11.84 MiB。14 项预算与 Steam 打包相关单测通过,覆盖错误 profile、完整启动依赖计数、符号链接去重,以及资源、音频、完整应用超限拒绝。重新打包的 macOS ARM64 应用为 310.33 / 768 MiB,离线资源与原生库校验通过。Windows / Linux 当前旧产物需重新构建,交由对应打包 CI 验收;本轮未重新测量弱网首次可玩时间。
2026-10-07 历史验证(下表使用调整前的预算):104 个文件的 528 个单元测试、5 项生产预览按需加载测试、离线 Electron、类型检查与发布完整性检查通过。限速测试使用 Pixel 5 浏览器配置、Fast 3G、4 倍 CPU 降速和 Metal 渲染后端。
| 预算项目 | 实测 | 目标 | 结果 |
|---|---|---|---|
| 竞速入口静态 JS gzip | 288.1 KiB | 300 KiB | 通过 |
| 城市入口静态 JS gzip | 299.4 KiB | 300 KiB | 通过 |
| 竞速首次可操作画面 | 12.1 秒 | 15 秒 | 通过 |
| 城市首次可操作画面 | 20.1 秒 | 15 秒 | 未通过 |
| 完整 Web 资源 | 11.76 MiB | 11.25 MiB | 未通过 |
城市阶段标记显示场景构建仍占约 8.7 秒。新体积预算不改变这次 20.1 秒的历史启动超限;城市初始化仍需优化,不能仅凭体积检查通过标记完整发布门禁通过。