LazyDFU — это оптимизационная модификация (mod) для Minecraft, которая откладывает ненужную инициализацию до тех пор, пока она не потребуется. Конкретно, она делает инициализацию DataFixerUpper "ленивой" — то есть, правила, необходимые для миграции данных из старых версий Minecraft в новые, не создаются немедленно, а только тогда, когда в этом возникает действительная необходимость.
ЭТО МОД ДЛЯ FABRIC. ЛЮБАЯ ВЕРСИЯ ДЛЯ ДРУГОГО МОД-ЛОАДЕРА ЯВЛЯЕТСЯ НЕОФИЦИАЛЬНОЙ И НЕ ПОДДЕРЖИВАЕТСЯ МНОЙ. ВЫ ПРЕДУПРЕЖДЕНЫ.
Однако, начиная с Minecraft 1.19.4 и выше, Mojang значительно оптимизировала инициализацию DFU, в результате чего во многих конфигурациях эта модификация больше не требуется. Поддержка будет продолжена для более старых версий Minecraft.
Совместимость
LazyDFU 0.1.2 совместима с Minecraft версий от 1.14 до 1.18.2 и работает как на стороне клиента, так и на стороне сервера.
LazyDFU 0.1.3 совместима с Minecraft 1.19 и выше, однако Mojang теперь сама реализует функциональность, предоставляемую LazyDFU, на стороне сервера. Клиент по-прежнему инициализирует все правила DFU по умолчанию, поэтому LazyDFU перехватывает нативную функцию клиента, отвечающую за включение "выпечки" (baking) правил DFU, и превращает её в операцию без действия (no-op).
Почему это работает?
DataFixerUpper (часто сокращённо DFU) — это компонент Minecraft, ответственный за обработку обновления миров из старых версий Minecraft в более новые. DFU инициализируется очень рано в процессе запуска Minecraft — фактически, до того, как появляется игровое окно. Он смехотворно переусложнён и очень медлителен, но это то, с чем нам дано работать от Mojang.
В процессе инициализации DFU кэширует правила, необходимые для конвертации из старых версий в текущую версию Minecraft, через все промежуточные версии. Этот процесс происходит в фоновом режиме, но он чрезвычайно медленный, так как интенсивно использует ресурсы процессора и памяти. В Minecraft 1.16.5 я замерял, что этот процесс занимает 9 секунд на настольном ПК с Ryzen 9 3900X (высокопроизводительный десктопный процессор 2019 года) и 57 секунд на ноутбуке с i5-8250U (процессор среднего класса 2017 года).
Всё, что делает LazyDFU — останавливает этот процесс. Она позволяет DFU инициализироваться, но принудительно запрещает ему кэшировать все эти правила. В результате правила DFU компилируются только тогда, когда миру требуется конвертация. Это означает, что вы можете наблюдать кратковременные лаги (lag spikes), если LazyDFU вынудит игру скомпилировать правила миграции, но после завершения компиляции штрафа производительности не будет.
Сравнение с другими модификациями
По сравнению с другими модификациями, LazyDFU обладает основными преимуществами: простота, безопасность и низкое воздействие на игру.
- LazyDFU — очень простая модификация. Весь код мода занимает около дюжины строк, что делает его настолько же простым, насколько это возможно для мода, приносящего значительные преимущества. (Это также делает её идеальным модом для экспериментов с новой платформой Mixin!)
- LazyDFU обладает высокой совместимостью и безопасна. Крайне маловероятно, что LazyDFU войдёт в конфликт с другими модификациями. Этот мод основан на аналогичном исправлении (patch) в Paper, которое использовалось более года без сообщений о проблемах при миграции на новые версии Minecraft. (Paper с тех пор изменил подход, заменив фиксаторы данных Mojang на собственную высокооптимизированную реализацию.)