【问题标题】:Is it possible to store and load precompiled js to org.graalvm.polyglot.Context是否可以将预编译的 js 存储和加载到 org.graalvm.polyglot.Context
【发布时间】:2019-04-28 19:27:29
【问题描述】:

有什么方法可以将 javascript 源代码转换为一些可以存储和加载到 org.graalvm.polyglot.Context 的预编译声明,而不是将其作为原始字符串进行评估?类似于 nashorn 中未记录的--persistent-code-cache

【问题讨论】:

    标签: graalvm graaljs


    【解决方案1】:

    截至 19 年 5 月,您可以通过在不同的 Contexts 之间重用相同的 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 应用程序。不过没有预计到达时间。

    【讨论】:

    • 实际上第一个初步支持是在 RC7 中添加的 (2018-10-03)。从那时起我们对其进行了改进,因此最好使用最新的(RC16)
    • 2021 年 8 月更新:现在可以使用持久和加载的实验性功能:github.com/oracle/graal/blob/master/truffle/docs/…
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2011-07-03
    • 2016-10-10
    • 1970-01-01
    • 2021-09-24
    • 2012-03-15
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多