mirror of
https://github.com/Estom/notes.git
synced 2026-02-04 11:04:21 +08:00
Java内容重新整理删除过期的东西
This commit is contained in:
112
Java/JavaDemo/codedemo/script/ScriptRunPerformence.java
Normal file
112
Java/JavaDemo/codedemo/script/ScriptRunPerformence.java
Normal file
@@ -0,0 +1,112 @@
|
||||
package cn.aofeng.demo.script;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.script.Bindings;
|
||||
import javax.script.Compilable;
|
||||
import javax.script.CompiledScript;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
/**
|
||||
* 脚本语言运行性能测试:
|
||||
* <pre>
|
||||
* 1、每次运行脚本都解释的执行性能。
|
||||
* 2、编译脚本后再运行的性能。
|
||||
* </pre>
|
||||
*
|
||||
* @author 聂勇 <aofengblog@163.com>
|
||||
*/
|
||||
public class ScriptRunPerformence {
|
||||
|
||||
private final static int COUNT = 100000;
|
||||
|
||||
/**
|
||||
* 每次解释脚本并运行<code>COUNT</code>次。
|
||||
*
|
||||
* @param script 脚本表达式
|
||||
* @param vars 用于替换<code>script</code>中变量的Key=>Value集合
|
||||
* @throws ScriptException 如果解释或运行脚本出错
|
||||
*/
|
||||
public void parse(String script, Map<String, Object> vars) throws ScriptException {
|
||||
ScriptEngine scriptEngine = getScriptEngine("javascript");
|
||||
long startTime = System.currentTimeMillis();
|
||||
for (int i = 0; i < COUNT; i++) {
|
||||
Bindings binds = createBinding(vars, scriptEngine);
|
||||
scriptEngine.eval(script, binds);
|
||||
}
|
||||
long usedTime = System.currentTimeMillis() - startTime;
|
||||
System.out.println( String.format("每次都解释脚本执行%d次消耗%d毫秒", COUNT, usedTime) );
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译脚本后运行<code>COUNT</code>次。
|
||||
*
|
||||
* @param script 脚本表达式
|
||||
* @param vars 用于替换<code>script</code>中变量的Key=>Value集合
|
||||
* @throws ScriptException 如果编译或运行脚本出错
|
||||
*/
|
||||
public void compile(String script, Map<String, Object> vars) throws ScriptException {
|
||||
ScriptEngine scriptEngine = getScriptEngine("javascript");
|
||||
Compilable compileEngine = (Compilable) scriptEngine;
|
||||
CompiledScript compileScript = compileEngine.compile(script);
|
||||
long startTime = System.currentTimeMillis();
|
||||
for (int i = 0; i < COUNT; i++) {
|
||||
Bindings binds = createBinding(vars, scriptEngine);
|
||||
compileScript.eval(binds);
|
||||
}
|
||||
long usedTime = System.currentTimeMillis() - startTime;
|
||||
System.out.println( String.format("编译脚本后执行%d次消耗%d毫秒", COUNT, usedTime) );
|
||||
}
|
||||
|
||||
private ScriptEngine getScriptEngine(String name) {
|
||||
ScriptEngineManager sem = new ScriptEngineManager();
|
||||
return sem.getEngineByName(name);
|
||||
}
|
||||
|
||||
private Bindings createBinding(Map<String, Object> vars,
|
||||
ScriptEngine scriptEngine) {
|
||||
Bindings binds = scriptEngine.createBindings();
|
||||
if (null != vars && !vars.isEmpty()) {
|
||||
binds.putAll(vars);
|
||||
}
|
||||
|
||||
return binds;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws ScriptException {
|
||||
if ( args.length != 1) {
|
||||
System.err.println("参数错误。使用示例:\n java cn.aofeng.demo.script.ScriptRunPerformence [parse|compile]");
|
||||
System.exit(-1);
|
||||
}
|
||||
String runType = args[0];
|
||||
if ( !"parse".equals(runType) && !"compile".equals(runType) ) {
|
||||
System.err.println("参数错误。使用示例:\n java cn.aofeng.demo.script.ScriptRunPerformence [parse|compile]");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
String script = "function run(a, b) {" +
|
||||
"var c = a + b;" +
|
||||
"var d = a * b;" +
|
||||
"var e = a / b;" +
|
||||
"var f = a % b;" +
|
||||
"var g = a - b;" +
|
||||
"var express = ((a * 5) > b || b * 10 >= 100) && (a * b > 99);" +
|
||||
"}" +
|
||||
"" +
|
||||
"run(x, y);";
|
||||
Map<String, Object> vars = new HashMap<String, Object>(2);
|
||||
vars.put("x", 20);
|
||||
vars.put("y", 9);
|
||||
|
||||
ScriptRunPerformence srp = new ScriptRunPerformence();
|
||||
if ("parse".equals(runType)) {
|
||||
srp.parse(script, vars);
|
||||
} else {
|
||||
srp.compile(script, vars);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user