2016-07-13 5 views
1

Есть ли способ кэшировать скрипт, оцененный в Nashorn, чтобы избежать оценки одного и того же сценария дважды?Nashorn script caching

Например, у меня есть библиотека js, которая что-то делает. Я хочу оценить библиотеку один раз и повторно использовать ее в каждом файле, который я хочу.

public void modifyFile(String inputFile){ 
    scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); 
    bindings = scriptEngine.createBindings(); 
    scriptEngine.eval(new FileReader("css-lib.js"),bindings); 
    bindings.put(INPUT, readFile(inputFilePath, StandardCharsets.UTF_8)); 
    scriptEngine.getContext().setWriter(new StringWriter()); 
    executeScript(COMPRESS_SCRIPT_PATH, scriptEngine, bindings); 
} 

ответ

3

Если вы «eval» на одном скрипте дважды, движок Nashorn запустит этот скрипт дважды! Но оценка дважды не предполагает компиляции (для байт-кода) дважды. Nashorn делает кэширование скомпилированного представления и повторного использования.