DFU载入优化

DFU载入优化

通过延迟非必需初始化,使游戏启动更快。

优化

LazyDFU 是一个 Minecraft 优化模组,它将不必要的初始化工作推迟到实际需要时才执行。具体来说,它使 DataFixerUpper 的初始化变为“惰性”——也就是说,在真正需要将数据从旧版本 Minecraft 迁移到新版本之前,它不会立即创建所需的规则。

此模组适用于 Fabric/Quilt

兼容性

LazyDFU 0.1.2 兼容 Minecraft 1.14 至 1.18.2,并可在客户端和服务端运行。

LazyDFU 0.1.3 兼容 Minecraft 1.19 及以上版本,但 Mojang 现在已在服务端实现了 LazyDFU 所提供的功能。客户端默认仍会初始化所有 DFU 规则,因此 LazyDFU 会挂钩到原生客户端功能中,启用 DFU 规则构建并将其变为空操作。

然而,从 Minecraft 1.19.4 及以上版本开始,Mojang 已对 DFU 初始化进行了大幅优化,此模组在许多配置下已不再必要。它将继续支持旧版本的 Minecraft。

赞助我!

这个模组是否让 Minecraft 变得可玩?支持一点资金,这样我就能继续开发它。

为什么它有效?

DataFixerUpper(通常缩写为 DFU)是 Minecraft 中负责处理从旧版本到新版本世界升级的组件。DFU 在 Minecraft 启动过程的非常早期就被初始化——实际上,它在游戏窗口出现之前就已初始化。它被过度设计,速度极慢,但这是 Mojang 提供给我们使用的。

作为 DFU 初始化过程的一部分,它会缓存从旧版本转换到 Minecraft 每个中间版本,直到所启动游戏版本的所需规则。这个过程在后台进行,但它极其缓慢,因为它既占用 CPU 又占用内存。使用 Minecraft 1.16.5,我在 Ryzen 9 3900X 台式机(2019 年发布的高端台式机 CPU)上测得此过程耗时 9 秒,而在配备 i5-8250U(2017 年的中端笔记本芯片)的笔记本电脑上耗时 57 秒。

LazyDFU 所做的只是停止这个过程——它允许 DFU 初始化,但会强制它不缓存所有这些规则。因此,DFU 规则只在需要转换世界时才进行编译。这意味着如果 LazyDFU 强制游戏编译迁移规则,你可能会看到卡顿,但一旦完成,就没有性能损失。

证明给我看

我录制了一段视频,展示了 LazyDFU 的效果。

与其他模组比较

与其他模组相比,LazyDFU 的主要优势是简单、安全,且对游戏影响低。

  • LazyDFU 是一个非常简单的模组。整个模组大约只有十几行代码,几乎简单到不能再简单,却能带来巨大的好处。(这也意味着它是试验新 Mixin 平台的理想模组!)
  • LazyDFU 高度兼容且安全。LazyDFU 极不可能与其他模组冲突。此模组基于 Paper 中一个类似的补丁,该补丁已使用一年多,且没有迁移到新版本 Minecraft 的报道问题。(Paper 之后已改用自己高度优化的实现来替换 Mojang 的数据修复器。)