1

甲骨文在 jdk6 中包含了一只被剥皮的犀牛

剥离的功能之一是 rhino js 到字节码编译器

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

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

4

1 回答 1

0

我让它工作了

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

然而,这并不像将它放入您的项目那么容易,因为 oracle 更改了 rhino 实现的命名空间。

所以你必须移植包,其中包括大量指向错误命名空间的字符串(用于类生成)

我还需要将优化器注入到内部 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);

也可能有一种“自动注入”的方式 - Rhinos Context 类自动期望 Codegen 类在特定包中 - 它取决于上下文类的 oracle 端口,但我没有找到任何来源..

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

codegen 端口针对特定的 rhino 版本,可能不适用于所有 vm 版本,或者可能在 vm 更新时中断

所以我放弃了 jsr233 api 并直接使用 rhino 作为库。我还经历了性能的大幅提升——我希望 jsr233 api 会为一些 js 调用增加很多开销。

于 2013-05-24T13:19:23.630 回答