JEIOptimizer
Мод для Minecraft
Уникальный мод, созданный специально для проекта PiglinMine.
Создает индекс фильтра ингредиентов JEI параллельно — сокращает время подключения к серверу до 17 секунд при работе с большими сборками модов.
Что это делает
При подключении к серверу с модами JEI перестраивает весь свой индекс поиска предметов с нуля — потому что сервер может использовать пользовательские рецепты. На сборке из 250 модов с примерно 50 000 предметов это занимает более 12 секунд в основном потоке . Ваш клиент просто зависает.
JEIOptimizer распараллеливает сборку JEI IngredientFilterна нескольких рабочих потоках. Для каждого префикса поиска (название предмета, ID мода, тег, всплывающая подсказка и т. д.) выделяется отдельный поток, работающий с независимыми структурами данных — никаких конфликтов, никаких состояний гонки, никаких рисков.
Измерения в реальных условиях
Протестировано на сборке из более чем 250 модов (AE2, Mekanism, Create, Cobblemon, Apotheosis, AllTheCompressed, ...). Процессор: Ryzen 5600X · 10 рабочих потоков · NVMe · 8 ГБ выделенной оперативной памяти · удаленный сервер (Hetzner DC).
| Фаза | Ванильный JEI | + JEIOptimizer | Снижение |
|---|---|---|---|
| Фильтр ингредиентов здания | 12.00 с | 0,79 с | −94% (в 15 раз быстрее) |
| Начальный общий показатель JEI | 25,84 с | 14,17 с | −45% |
Общее время соединения | ~40 с | ~23 с | −42% (−17 с) |
В сочетании с дополнительной настройкой, описанной ниже (см. «Бесплатные 8 секунд »), вы можете стабильно сокращать время ожидания подключения к серверу с 40 секунд до ~23 секунд .
Как это работает (техническая часть)
JEI IngredientFilterсоздает поисковый индекс, в котором каждый «префикс» (имя, modId, тег, всплывающая подсказка и т. д.) имеет свой собственный GeneralizedSuffixTree. Независимые структуры → безопасно создавать их параллельно.
Ванильный JEI:
for each ingredient (50,000):
for each prefix (7-10):
compute tokens → insert into suffix tree
Один поток = примерно 12 секунд.
JEIOptimizer:
parallelStream over prefixes:
for each ingredient:
compute tokens → insert into own suffix tree
6-10 ядер, обрабатывающих 7-10 префиксов одновременно, = ~0,8 секунды.
Режимы фильтрации (в конфигурации)
OFF— стандартное поведение JEIBATCH— Небольшое улучшение, оптимизированное для кэширования, однопоточный режимPARALLEL_PREFIX— параллельная сборка по префиксам (безопасная)PARALLEL_FULL— также выполняет параллельную токенизацию внутри префикса ( по умолчанию, самый быстрый вариант )
Дополнительные 8 секунд (ручная настройка JEI)
В файле config/jei/jei-client.iniизмените:
tooltipSearchMode = DISABLED
JEI индексирует текст всплывающей подсказки каждого элемента при каждом подключении. Некоторые моды выполняют ресурсоемкие операции ввода-вывода при рендеринге всплывающих подсказок, затрачивая около 8 из первоначальных 12 секунд впустую. Игроки почти всегда ищут по имени, а не по тексту всплывающей подсказки.
Если игроки хотят использовать поиск по всплывающей подсказке #prefix, используйте REQUIRE_PREFIXвместо этого.
Конфигурация
config/jeioptimizer-client.toml(автоматически сгенерировано):
[filter]
mode = "PARALLEL_FULL" # Default. Safe, fastest.
async = false # Experimental: build in background
log_timing = true # Log timings for verification
worker_count = 0 # 0 = auto (cores - 2)
[plugins]
parallel_phases = [] # Experimental — see below
parallel_creative_tabs = false # Experimental — see below
Безопасные настройки по умолчанию. Просто добавьте jar-файл, и всё готово. Никаких изменений в конфигурации не требуется.
Этот мод установлен на серверах PiglinMine
Уже настроено, не нужно ставить вручную. Качай лаунчер и заходи — JEIOptimizer есть на сервере:
Скачать лаунчерБесплатно · автоустановка модов · моды уже на серверах
