甲骨文在 jdk6 中包含了一只被剥皮的犀牛
剥离的功能之一是 rhino js 到字节码编译器
是否可以在应用程序级别包含它?
我想在不改变 jsr223 调用的情况下提高性能
甲骨文在 jdk6 中包含了一只被剥皮的犀牛
剥离的功能之一是 rhino js 到字节码编译器
是否可以在应用程序级别包含它?
我想在不改变 jsr223 调用的情况下提高性能
我让它工作了
基本上你需要做的就是包含 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 调用增加很多开销。