【问题标题】:Java Scripting (jsr223): is it possible to (re)add the rhino compile featureJava Scripting (jsr223):是否可以(重新)添加 rhino 编译功能
【发布时间】:2013-05-15 11:11:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java javascript rhino jsr223


    【解决方案1】:

    我搞定了

    基本上你需要做的就是包含 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 类在特定包中 - 它取决于 context 类的 oracle 端口,但我没有找到任何来源..

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多