我被允许运行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);
}
}
}
请告诉我们一些解决方案。
答案 0 :(得分:1)
这是一个已修复的已知性能错误,请参阅https://bugs.openjdk.java.net/browse/JDK-8137333。它应该与Java 8u72一起发布,定于2016年1月发布。https://jdk9.java.net/download/上提供的Java 9预发布版本也包含修复程序(自JDK9 build b85起)。