Движок java 8 nashorn очень медленный

Я запускаю следующий тест javascript

var mark = java.lang.System.nanoTime() / 1000000000.0;
for(var i = 0; i != 1000; i++) {
}
var now = java.lang.System.nanoTime() / 1000000000.0;
var e = now - mark;
print(1 / e);

и получить этот результат

27.361456496425802

это кажется очень медленным, почти ошибкой или чем-то, что я делаю не так. Вот код Java

    try {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");

        String[] lines = IO.readAllLines(IO.file(root, "LoadList.txt"));

        String script = "";

        for(int i = 0; i != lines.length; i++) {
            String file = lines[i].trim();

            if (!file.startsWith("#") && file.length() != 0) {
                script += IO.readAllText(IO.file(root, file));
            }
        }

        engine.eval(script);
    } catch(Exception ex) {
        ex.printStackTrace();
    }

Кто-нибудь знает, что я делаю неправильно, или видел проблему такого типа и знает, как ее исправить?

заранее спасибо

Почему вы печатаете 1/e, а не e?

user7 09.04.2018 18:06

Вы печатаете 1/e с eразницей во времени. e составляет около 36,5 мс

jhamon 09.04.2018 18:07

1 / e (e в секундах) дает мне количество кадров в секунду, как цикл выполнялся в итерации обновления игры. Так я просто лучше понимаю скорость. Но он все еще кажется очень медленным, я не уверен, насколько быстро обычно работает javascript, но я надеялся, что, по крайней мере, 1000 кадров в секунду или даже пара десятков тысяч кадров в секунду было бы неплохо. Цикл 1000 раз будет обычным явлением в обновлении игры, например, при запуске системы частиц.

noop 09.04.2018 21:05

Чтобы объяснить немного дальше. Если пустой цикл работает только со скоростью около 27 кадров в секунду, игра, реализующая систему частиц в своей итерации обновления, не будет иметь надежды на то, что с этой реализацией превысит 27 кадров в секунду, и, вероятно, намного меньше из-за инструкций, которые должны быть помещены в пустом цикле для реализации системы частиц

noop 09.04.2018 21:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
476
1

Ответы 1

после некоторых исследований выяснилось, что java-скрипту требуется некоторое время, чтобы разогреться до скорости. вот обновление теста

for(var i = 0; i != 1000; i++) {
  var mark = java.lang.System.nanoTime() / 1000000000.0;
  for(var j = 0; j != 1000; j++) {
  }
  var now = java.lang.System.nanoTime() / 1000000000.0;
  var e = now - mark;
  print(1 / e + " fps")
}

и на последней итерации я получаю 99108.03064699778 кадров в секунду. (он действительно варьируется, самый низкий, который у меня был, на последней итерации был около 50000 кадров в секунду)

Другие вопросы по теме