- Баллы
- 36
Приветствую! Я слушаю кучу пакетов через ProtocolLib и обрабатываю их текстовые компоненты через js скрипты с помощью движка Rhino. В среднем у меня такая обработка текста занимает 0.01 секунду, при чем ~90% процентов от этого времени занимает именно выполнение скриптов. Все бы ничего, но вот с пакетом Window Items все становится куда хуже. Там приходится обрабатывать сразу огромное кол-во предметов, их имена и описания. Я использую parallelStream для обработки списка с предметами и их описания. В таком случае время полной обработки пакета занимает в среднем от 0.1 до 0.3 сек, когда весь самый большой инвентарь из пакета максимально забит предметами с описаниями на 3 строки. В игре это время очень хорошенько ощущается и становится совсем неприятно пользоваться такими медленными инвентарями.
При выполнении скриптов я каждый раз создаю для него новый контекст, получаю заранее скомпилированный скрипт, совсем немного изменяю scope, добавляя в него 1 объект и наконец выполняю тот скрипт, закрывая контекст.
Я пробовал создавать один раз единственный контекст и использовать его все время, это очень хорошо помогло уменьшить затраты по времени, но параллельная обработка стала невозможной и геморрой с пакетом Window Items не пропал.
Уточню, это все я тестирую на своем простом ноуте.
Я так же пробовал перейти на GraalJS, он по идеи куда быстрее. Но там свои проблемы: после перезагрузки сервера через /reload confirm он ломается и выводит ошибку, так же, как я понял ему надо GraalVM который просто библиотекой к проекту не идет.
Как вы считаете, это все вообще адекватная идея? Изменится ли ситуация со скоростями если плагин будет стоять на хорошем сервере? Будут ли еще хуже проблемы от увеличения кол-ва игроков?
Буду рад услышать ваше мнение!
При выполнении скриптов я каждый раз создаю для него новый контекст, получаю заранее скомпилированный скрипт, совсем немного изменяю scope, добавляя в него 1 объект и наконец выполняю тот скрипт, закрывая контекст.
Я пробовал создавать один раз единственный контекст и использовать его все время, это очень хорошо помогло уменьшить затраты по времени, но параллельная обработка стала невозможной и геморрой с пакетом Window Items не пропал.
Уточню, это все я тестирую на своем простом ноуте.
Я так же пробовал перейти на GraalJS, он по идеи куда быстрее. Но там свои проблемы: после перезагрузки сервера через /reload confirm он ломается и выводит ошибку, так же, как я понял ему надо GraalVM который просто библиотекой к проекту не идет.
Как вы считаете, это все вообще адекватная идея? Изменится ли ситуация со скоростями если плагин будет стоять на хорошем сервере? Будут ли еще хуже проблемы от увеличения кол-ва игроков?
Буду рад услышать ваше мнение!