Можно ли сохранить и загрузить предварительно скомпилированные файлы js в org.graalvm.polyglot.Context - PullRequest
5 голосов
/ 28 апреля 2019

Есть ли способ конвертировать исходный код javascript в какой-то предварительно скомпилированный код, который можно как-то сохранить и загрузить в org.graalvm.polyglot.Context вместо его преобразования в необработанную строку? Что-то вроде недокументированного --persistent-code-cache в нашорне.

1 Ответ

4 голосов
/ 02 мая 2019

Начиная с мая 1919 года вы можете совместно использовать код в одном и том же процессе, чтобы избежать повторного анализа (аналогично сохранению кода Nashorn), повторно используя один и тот же объект Engine между различными Context s, например так:

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.Мы уже поддерживаем создание native-изображений, которые содержат интерпретатор JavaScript и компилятор GraalVM.Мы хотим добавить поддержку, позволяющую включать предварительно прогретые сценарии, возможно, с предварительно скомпилированным нативным кодом JavaScript.Таким образом, вы можете запустить приложение JS с практически нулевым временем запуска.ЭТА нет.

...