我想加快Nashorn的评估

时间:2015-11-17 09:49:28

标签: javascript java nashorn

我被允许运行zxcvbn.js (Javascript library)到Nashorn。 但是有一个问题。

eval(预编译)非常慢。大约需要3分钟。 我想更快地行动。

public class StrengthChecker {

  private static final String ZXCVBN_PATH = "/META-INF/resources/webjars/zxcvbn/1.0/zxcvbn.js";

  private final ScriptEngine engine;

  public StrengthChecker() {
    ScriptEngineManager manager = new ScriptEngineManager();
    engine = manager.getEngineByName("nashorn");

    Bindings engineScope = engine.getBindings(ScriptContext.ENGINE_SCOPE);
    engineScope.put("window", engineScope);

    try {

      // -------------------------------------------
      // Here is very slow definition of zxcvbn.js.
      // -------------------------------------------
      engine.eval(getResourceContents(ZXCVBN_PATH));

    } catch (ScriptException e) {
      throw new RuntimeException(e);
    }
  }

  public Strength check(String pw) {
    try {
      Map<String, Object> result;
      result = (Map<String, Object>) engine.eval("zxcvbn('" + pw + "');");

      return new Strength(
        ((Double) result.get("entropy")).intValue(),
        (int) result.get("score"),
        ((Double) result.get("crack_time")).intValue()
      );
    } catch (ScriptException e) {
      throw new RuntimeException(e);
    }
  }

}

请告诉我们一些解决方案。

1 个答案:

答案 0 :(得分:1)

这是一个已修复的已知性能错误,请参阅https://bugs.openjdk.java.net/browse/JDK-8137333。它应该与Java 8u72一起发布,定于2016年1月发布。https://jdk9.java.net/download/上提供的Java 9预发布版本也包含修复程序(自JDK9 build b85起)。