读书人

Mozilla Rhino:施用java语言来解释和执

发布时间: 2012-12-27 10:17:10 作者: rapoo

Mozilla Rhino:使用java语言来解释和执行javascript脚本

Rhino 项目可以追朔到 1997 年,当时 Netscape 计划开发一个纯 Java 实现的 Navigator,为此需要一个Java 实现的 JavaScript —— Javagator。它也就是 Rhino 的前身。起初 Rhino 将 JavaScript编译成 Java的二进制代码执行,这样它会有最好的性能。后来由于编译执行的方式存在垃圾收集的问题并且编译和装载过程的开销过大,不能满足一些项目的需求,Rhino提供了解释执行的方式。随着 Rhino 开放源代码,越来越多的用户在自己的产品中使用了 Rhino,同时也有越来越多的开发者参与了 Rhino的开发并做出了很大的贡献。如今 Rhino1.6R2 版本将被包含在 Java SE6 中发行,更多的 Java 开发者将从中获益。

Rhino 提供了如下功能

对 JavaScript 1.5 的完全支持直接在 Java 中使用 JavaScript 的功能一个 JavaScript shell 用于运行 JavaScript 脚本一个 JavaScript 的编译器,用于将 JavaScript 编译成 Java 二进制文件

?

如果我们要解释一些更复杂的脚本语言,或者想在运行时改变该脚本该如何做呢?脚本引擎支持一个重载的 eval 方法,它可以从一个 Reader 读入所需的脚本:

?

脚本编译的过程如下:首先将 engine 转换为 Compilable 接口,然后调用 Compilable 接口的 compile方法得到一个 CompiledScript 的实例,这个实例就代表一个编译过的脚本,如此用 CompiledScript 的 eval方法即为调用编译好的脚本了。在我的 Think Pad 上,这段代码编译后的调用大约比直接调用 engine.eval 要快 3-4倍。随着脚本复杂性的提升,性能的提升会更加明显。


Mozilla Rhino:施用java语言来解释和执行javascript脚本
回页首


function func(){    println("Hello World");}t=java.lang.Thread(func);t.start();

?

对于 JavaBean 的支持

Rhino 对于 JavaBean 的 get 和 is 方法将会自动匹配,例如调用 hello.string,如果不存在 string这个变量,Rhino 将会自动匹配这个实例的 isString 方法然后再去匹配 getString 方法,若这两个方法均不存在才会返回undefined。

读书人网 >JavaScript

热点推荐