Javascript 我想加快纳肖恩的评估
我被允许跑向纳肖恩。 但有一个问题 eval(预编译)非常慢。大约需要3分钟。 我想快点行动Javascript 我想加快纳肖恩的评估,javascript,java,nashorn,Javascript,Java,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() { Scr
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);
}
}
}
public class-StrengthChecker{
私有静态最终字符串ZXCVBN_PATH=“/META-INF/resources/webjars/ZXCVBN/1.0/ZXCVBN.js”;
私人最终脚本引擎;
公共力量检查者(){
ScriptEngineManager管理器=新建ScriptEngineManager();
engine=manager.getEngineByName(“nashorn”);
Bindings engineScope=engine.getBindings(ScriptContext.engine\u作用域);
engineScope.put(“窗口”,engineScope);
试一试{
// -------------------------------------------
//这里是zxcvbn.js的非常慢的定义。
// -------------------------------------------
engine.eval(getResourceContents(zxcvn_路径));
}捕获(脚本异常){
抛出新的运行时异常(e);
}
}
公共强度检查(管柱pw){
试一试{
地图结果;
结果=(Map)engine.eval(“zxcvbn(“+pw+”);”);
重振雄风(
((双精度)result.get(“熵”).intValue(),
(int)结果获取(“分数”),
((双精度)result.get(“crack_time”)).intValue()
);
}捕获(脚本异常){
抛出新的运行时异常(e);
}
}
}
请告诉我们一些解决方案。这是一个已知的性能错误,已修复,请参阅。它应该与Java 8u72一起发布,计划于2016年1月发布。上提供的Java 9预发布版本也包含修复程序(自JDK9 build b85起)。因此,当您在浏览器中而不是在Nashorn中运行javascript代码时,它不会那么慢?当浏览器速度快时。当在Nashorn中运行时,它会更快。但是当你在Nashorn加载一个库(zxcvbn.js)时,它会很慢。谢谢你给了我一个好的答案。谢谢你的好意。