Oracle在jdk6
中包含了剥离的rhino其中一个被剥离的功能是rhino js到字节码编译器
是否可以将其包含在应用程序级别?
我想在不改变jsr223调用的情况下提高性能
答案 0 :(得分:0)
我得到了它的工作
基本上你需要做的就是包含rhino的org.mozilla.javascript.optimizer包。
然而,这并不像将它放入项目那么容易,因为oracle改变了rhino实现的命名空间。
所以你必须移植包,其中包含大量指向错误命名空间的字符串(用于类生成)
我还需要将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);
也可能存在'自动注入'方式 - Rhinos Context类自动期望特定包中的Codegen类 - 它取决于上下文类的oracle端口,但我没有找到任何源..
但这个apporoach有一个很大的缺点:
codegen端口针对特定的rhino版本,可能无法在所有vm版本上运行,也可能在vm更新时中断
所以我删除了jsr233 api并直接使用rhino作为库。 我也经历了很大的性能提升 - 我希望jsr233 api为一些js调用增加了很多开销。