是否可以将预编译的js存储并加载到org.graalvm.polyglot.Context

时间:2019-04-28 19:27:29

标签: graalvm graaljs

有什么方法可以将javascript源转换为可以进行某种方式存储和加载到org.graalvm.polyglot.Context的预编译语句,而不是将其评估为原始String?类似nashorn中未记录的--persistent-code-cache

1 个答案:

答案 0 :(得分:3)

从19年5月开始,您可以在同一过程中共享代码,以免重新解析(类似于Nashorn代码持久性),方法是在不同的Engine之间重用相同的Context对象,如下所示:< / p>

try (Engine engine = Engine.create()) {
    Source source = Source.create("js", "21 + 21");
    try (Context context = Context.newBuilder().engine(engine).build()) {
        int v = context.eval(source).asInt();
        assert v == 42;
    }
    try (Context context = Context.newBuilder().engine(engine).build()) {
        int v = context.eval(source).asInt();
        assert v == 42;
    }
}

更多详细信息可以在这里找到:https://www.graalvm.org/docs/graalvm-as-a-platform/embed/#enable-source-caching

我们计划将来结合GraalVM本机映像工具来支持跨进程的持久代码缓存。我们已经支持创建包含JavaScript解释器和GraalVM编译器的本机图像。我们希望增加支持以允许包含预热的脚本,希望还包含预编译的JavaScript本机代码。因此,您也许能够以接近零的启动时间启动JS应用程序。虽然没有ETA。