Important
本项目仍在积极开发,可能存在未知 BUG 或性能问题。完整重构和测试需要时间,请耐心等待。
简体中文 • English (US) • 日本語
原始版本的代码在某些方面表现不佳,尤其是在资源受限的设备(如小米手环)上:
- 严重的性能瓶颈: 在切换章节(尤其是数据量较大的章节)时,CPU 占用率会飙升至 100%,导致长达 5 秒甚至更长时间的卡顿或无响应,严重影响游戏体验。
- 打字效果无法中断: 正在逐字显示对话时,玩家无法通过点击快速显示完整文本,必须等待效果自然结束,降低了阅读效率。
- 状态管理混乱: 原始代码中存在潜在的定时器泄露风险(打字效果的
setTimeout未被及时清理),可能导致后台资源消耗和意外行为。 - UI/UX 有待改进: 加载/存档界面的设计可以更直观易用;设置界面的实时预览和保存逻辑可以优化。
- 代码维护性: 大量使用内联样式和绝对定位,使得代码难以阅读、修改和扩展;缺乏足够的错误处理增加了程序意外崩溃的风险。
基于以上问题,我对代码进行了全面的重构和优化,主要目标是提升性能、稳定性和可维护性。
- 解决了章节切换卡顿的核心问题: 通过引入严格的定时器管理机制,确保在切换场景、章节或中断对话时,旧的打字效果
setTimeout被彻底清除。这从根本上解决了 CPU 100% 的问题,将章节切换时间从 5 秒以上大幅缩短至 1 秒以内,实现了近乎无缝的体验。 - 优化了 I/O 操作: 将设置的保存操作从滑块实时更改触发改为点击“保存”按钮触发,减少了不必要的
storage写入,避免了高频 I/O 带来的卡顿。 - 提升渲染效率: 使用计算属性 (
computed) 缓存判断结果,减少模板渲染时的重复计算。移除大量内联样式,改用 CSS 类;使用 Flexbox 进行布局,可能使渲染引擎工作更高效。 - 即时响应: 优化了打字效果逻辑,允许玩家在效果播放中点击屏幕立即显示完整文本,并在下一次点击时才推进对话。
- 全面的错误处理: 为 JSON 解析(章节数据、存档、设置)、文件读取 (
file.readText)、本地存储 (storage.get/set) 等关键操作添加了try...catch或fail回调处理,防止因数据损坏或 API 调用失败导致程序崩溃。 - 边界检查: 对访问数组(如场景、存档列表)和对象属性增加了有效性检查,避免因索引越界或数据丢失引发错误。
- 状态管理: 引入更明确的状态标志(如
isMenuVisible,recoveryMode),并在适当的生命周期(如onHide,onDestroy)清理资源(如定时器),提高了程序的稳定性。
- 代码结构优化: 大幅减少内联样式,采用语义化的 CSS 类进行样式定义。广泛使用 Flexbox 进行布局,使代码更简洁、适应性更强。逻辑上组织了模板结构(如区分对话层、选择层、菜单层等)。
- 逻辑清晰化: 重构了 JavaScript 代码,使用更清晰的变量和函数命名(如
isMenuVisible,clearTypingTimeout),引入常量替代魔法数字/字符串,将复杂函数(如nextDialogue)分解为更小、职责更单一的函数。 - 配置与状态分离: 在设置页面引入
tempSettings,实现了更改的实时预览和显式保存,逻辑更清晰。 - 注释与文档: 增加了代码注释,解释关键逻辑。这份 README 本身也是为了方便其他开发者理解改动。
- 本项目是基于原作《ATRI -My Dear Moments-》的非官方移植和优化,旨在学习和技术研究。
- 开发者与 Aniplex.EXE、Frontwing、枕社 (Makura) 或小米无任何关联。
- 本程序完全免费,源代码根据开源许可开放,禁止用于任何商业目的。
- 游戏资源(图像、文本、音乐等)的版权归原版权方所有。请支持正版游戏。
- 对于使用本程序可能产生的任何问题或版权纠纷,开发者不承担任何责任。
- 感谢 @liuyuze61 创建了最初的小米快应用移植版本,为本项目提供了基础。
- 感谢 @TLE 提供了初步的性能优化思路(尽管最终采用了不同的方案来彻底解决问题)。
- 感谢 Aniplex.EXE, Frontwing, Makura 创作了《ATRI -My Dear Moments-》这部优秀的作品。