是否可以将预编译的js存储和加载到org.graalvm.polyglot.Context
Is it possible to store and load precompiled js to org.graalvm.polyglot.Context
是否有任何方法可以将 javascript 源代码转换为一些预编译的状态,可以以某种方式存储和加载到 org.graalvm.polyglot.Context
而不是将其作为原始字符串求值?类似于 nashorn 中未记录的 --persistent-code-cache
。
自 2019 年 5 月起,您可以通过在不同的 Context
之间重复使用相同的 Engine
对象来在同一进程内共享代码以避免重新解析(类似于 Nashorn 代码持久性) :
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 应用程序。虽然没有预计到达时间。
是否有任何方法可以将 javascript 源代码转换为一些预编译的状态,可以以某种方式存储和加载到 org.graalvm.polyglot.Context
而不是将其作为原始字符串求值?类似于 nashorn 中未记录的 --persistent-code-cache
。
自 2019 年 5 月起,您可以通过在不同的 Context
之间重复使用相同的 Engine
对象来在同一进程内共享代码以避免重新解析(类似于 Nashorn 代码持久性) :
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 应用程序。虽然没有预计到达时间。