【问题标题】:java 8 nashorn engine is really slowjava 8 nashorn引擎真的很慢
【发布时间】:2018-09-19 01:59:54
【问题描述】:

我正在运行以下 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
  • 您打印 1/ee 时间差异。 e 大约是 36.5ms
  • 1/e(e 以秒为单位)为我提供每秒帧数,就像循环在游戏更新迭代中运行一样。我只是更好地了解这种方式的速度。但它看起来仍然很慢,我不确定 javascript 通常运行多快,但我希望至少每秒 1000 帧甚至每秒几千帧的速度会很好。 1000 次循环在游戏更新中很常见,例如运行粒子系统
  • 再解释一下。如果空循环仅以每秒 27 帧左右的速度运行,那么在其更新迭代中实现粒子系统的游戏将没有希望通过此实现达到每秒 27 帧以上,并且可能会更少,因为必须输入指令在空循环中实现粒子系统

标签: javascript java nashorn


【解决方案1】:

在做了一些研究之后,似乎 java 的 javascript 需要一点时间来加速。这是测试的更新

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 fps。 (它确实改变了我得到的最低值,在最后一次迭代中,大约是 50000 fps)

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2019-01-22
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多