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