Java Scripting (jsr223):是否可以(重新)添加rhino编译功能?



Oracle在jdk6中包含了一个剥离的rhino

剥离的特性之一是rhino js到字节码编译器

是否有可能在应用程序级别包含它?

我想在不改变jsr223调用的情况下提高性能

我成功了

基本上你需要做的就是包含rhino的org.mozilla.javascript.optimizer包。

然而,这并不像把它放到你的项目中那么容易,因为oracle改变了rhino实现的命名空间。

因此您必须移植包,其中包含大量指向错误命名空间(用于类生成)的string

我还需要将Optimizer注入内部rhino上下文:

Class c = Class.forName("sun.org.mozilla.javascript.internal.Context");
Field field = c.getDeclaredField("codegenClass");
field.setAccessible(true);
field.set(c, org.mozilla.javascript.optimizer.Codegen.class);

也可以有一种"自动注入"的方式——rhino的上下文类会自动在特定的包中使用Codegen类——这取决于上下文类的oracle端口,但我没有找到任何来源。

但是这种方法有一个很大的缺点:

编码端口针对特定的rhino版本,可能无法在所有vm版本上工作,或者可能在vm更新时中断

所以我放弃了jsr233 api,直接使用rhino作为库。我还体验到了很大的性能提升——我预计jsr233 api会给一些js调用增加很多开销。

最新更新