EMIAccelerator

EMIAccelerator

将EMI物品堆栈列表缓存到磁盘,并将搜索索引构建推迟到后台线程,大幅缩短EMI重载时间。

杂项

EMI 加速器

将 EMI 的物品堆叠列表缓存到磁盘,并将搜索索引的构建推迟到后台线程执行,从而大幅缩短 EMI 的重新加载时间。

概述

每次加入世界或重新加载资源时,EMI 都会重建整个物品堆叠列表和搜索索引。对于包含大量模组的整合包,这一过程可能需要数十秒,并且在构建搜索索引期间游戏界面会完全卡死。

EMI 加速器通过以下优化解决了这个问题:

  • 堆叠缓存:将 EmiStackList.stacks 序列化为 JSON,并在首次加载时缓存到磁盘。后续启动游戏时,将跳过完整的重新加载过程(约 130 毫秒,而之前需要约 40 秒)。
  • 延迟搜索:将 EmiSearch.bake() 推迟到后台线程执行,消除了大约 10 秒的界面阻塞。
  • 自动刷新:后台索引完成后自动更新 EMI 搜索结果,无需手动重新输入。

使用方法

命令 描述
/emiacc status 查看缓存状态、文件大小和命中次数
/emiacc clear 删除缓存(下次启动时重新构建)
/emiacc reload 手动触发一次 EMI 重新加载
/emiacc reload --force 清除缓存并强制进行完整的 EMI 重新加载

配置

配置文件路径:config/emi-accelerator/emi-accelerator.properties

选项 类型 默认值 描述
cacheEnabled 布尔值 true 启用物品堆叠缓存
autoClearOnModChange 布尔值 true 模组列表变化时自动清除缓存
maxFileSizeMb 整数 100 缓存文件的最大大小(MB)
diagnosticsEnabled 布尔值 false 将各阶段计时数据写入 reload-timings.json
deferredSearchEnabled 布尔值 true 启用后台延迟搜索索引

工作原理

  1. EMI 标签同步触发 → EmiReloadManager.reload() → ReloadWorker.run() 启动
  2. 检查缓存是否存在且有效(通过模组列表的 SHA-256 哈希值进行验证)
  3. 缓存命中:直接反序列化堆叠列表 → 跳过完整重新加载 → 在后台构建搜索索引 → 完成
  4. 缓存未命中:进行正常的 EMI 重新加载 → 完成后异步写入缓存
  5. 搜索构建完成后自动刷新 EMI 界面,并显示 [EMI Accelerator] Search Ready(搜索就绪)

依赖项

模组 版本 必需
EMI 1.1.22+ 是
  • 加载器:NeoForge 21.1.228+
  • 加载端:仅客户端
  • 环境:Minecraft 1.21.1

构建

./gradlew build

许可证

GNU AGPL 3.0