
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 |
启用后台延迟搜索索引 |
工作原理
- EMI 标签同步触发 →
EmiReloadManager.reload()→ReloadWorker.run()启动 - 检查缓存是否存在且有效(通过模组列表的 SHA-256 哈希值进行验证)
- 缓存命中:直接反序列化堆叠列表 → 跳过完整重新加载 → 在后台构建搜索索引 → 完成
- 缓存未命中:进行正常的 EMI 重新加载 → 完成后异步写入缓存
- 搜索构建完成后自动刷新 EMI 界面,并显示
[EMI Accelerator] Search Ready(搜索就绪)
依赖项
| 模组 | 版本 | 必需 |
|---|---|---|
| EMI | 1.1.22+ | 是 |
- 加载器:NeoForge 21.1.228+
- 加载端:仅客户端
- 环境:Minecraft 1.21.1
构建
./gradlew build
许可证
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。