本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9714138
建立时间:2004年12月20日




[脚本语言]动态脚本的编译
原创空间,  软件技术,  电脑与网络

邢红瑞 发表于 2006/5/24 11:00:22

Sun的 Java 6使用Rhino (the Mozilla 100% Java Javascript实现),一般来说,脚本的运行速度不如java语言,因为java语言毕竟是编译过的,脚本每次都会被解析和解释,例如下面的代码  ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByName("js");        Bindings bindings = engine.createBindings();        bindings.put("num", "20");        Object result = engine.eval(                "fib(num);" +                "function fib(n) {" +                "  if(n <= 1) return n; " +                "  return fib(n-1) + fib(n-2); " +                "};",                bindings);                System.out.println(result);时间2秒但是Rhino Javascript engine可以编译脚本的例如下面的代码      Map<String, CompiledScript> m = new HashMap<String, CompiledScript>();// ...        ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByName("js");        CompiledScript script = m.get("fib");        if(script == null) {            Compilable compilingEngine = (Compilable)engine;            script = compilingEngine.compile(                    "fib(num);" +                    "function fib(n) {" +                    "  if(n <= 1) return n; " +                    "  return fib(n-1) + fib(n-2); " +                    "};"                    );            m.put("fib", script);        }        Bindings bindings = engine.createBindings();        bindings.put("num", "20");        Object result = script.eval(bindings);        System.out.println(result);时间0秒,但是多个脚本引擎的实现,就不要编译了,使用一下代码Map<String, CompiledScript> m = new HashMap<String, CompiledScript>();// ...ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("js");Bindings bindings = engine.createBindings();bindings.put("num", "20");if(engine instanceof Compilable) { CompiledScript script = m.get("fib"); if(script == null) {  Compilable compilingEngine = (Compilable)engine;  script = compilingEngine.compile(   "fib(num);" +   "function fib(n) {" +   "  if(n <= 1) return n; " +   "  return fib(n-1) + fib(n-2); " +   "};"    );  m.put("fib", script); } script.eval(bindings);}else { engine.eval(r, bindings);}


阅读全文(4255) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144795296 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号