Quando avaliamos alguma script na JVM utilizando o método eval da classe javax.script.ScriptEngine basicamente são realizadas duas tarefas: a compilação do script e a execução dele.
Caso queiramos avaliar x vezes o mesmo script e estejamos chamando o método eval mencionado, o script ira ser compilado x vezes.
O mesmo script precisa ser compilado x vezes?
Não!
O que fazer ao respeito?
A especificação JSR-233 conta com uma classe chamada CompiledScript que como o mesmo nome diz, representa um script compilado, de modo que quando queiramos avaliar o script o único que vamos ter que fazer é executar ele.
Para compilar um script primeiro temos que realizar um casting do engine para a interfase Compilable e logo chamar o metodo compile:
CompiledScript compiledScript = ((Compilable) engine).compile(script)
Logo, quando queiramos avaliar o script compilado o único que vamos ter que fazer e chamar o método eval, passando como parâmetro o contexto (opcional):
Object result = compiledScript.eval(context)
4 respostas ate agora ↓
1 Cid R Andrade // Sep 11, 2008 at 4:45 pm
Diego, tem uma homenagem para você e para o MouseOver no meu blog. Quando puder, visite-o!
2 Davis Zanetti Cabral // Sep 14, 2008 at 10:37 am
Graaaande Diego!
Obrigado pela informação no meu blog! Realmente é verdade, há diferença entre os exemplos.
Abraço!
3 Abraao Isvi // Sep 14, 2008 at 12:01 pm
Olá vc saberia me dizer, se existe alguma maneira de chamar uma função de um compiledscript? tipo eu desejo usar um mesmo compiled script mas com contextos diferentes e chamando as funções em separado. Você saberia como me responder?
Grato!
4 Diego Carrion // Sep 14, 2008 at 2:08 pm
@Davis
nao foi nada
obrigado voce pelo excelente post
@Abraao
No Haml4j eu utilizo na inicializaçao:
compiledScript = ((Compilable) engine).compile(”render()”);
e futuramente:
(String) compiledScript.eval(context);
e também poderia fazer:
compiledScript.eval(context2);
compiledScript.eval(context3);
É isso o que voce quer fazer?
Deixar um comentário