On Mon, Apr 6, 2009 at 11:32 AM, Felix Meschberger <[email protected]> wrote:
> Hi,
>
> Bertrand Delacretaz schrieb:
>> On Mon, Apr 6, 2009 at 11:00 AM, Felix Meschberger <[email protected]> 
>> wrote:
>>> ...We should then probably also extend the Rhino script engine to cache
>>> compiled ecma scripts and reuse them, similar to what the JSP script
>>> engine does (no we probably don't need to write class files)....
>>
>> ...Rhino does provide a compiler
>> (https://developer.mozilla.org/en/Rhino_JavaScript_Compiler)...

> ...How about this approach, thus also leveraging the full scope of JSR 223
> (Java Scripting): The Java Scripting API provides API to allow for
> precompiled scripting languages. By leveraging this mechanism we can add
> support for precompiled scripts and enhanced performance to all
> scripting languages.
>
> We maintain a script cache in the Scripting Core bundle. This cache has
> the following attributes:
>
>  * Indexed by script path name, entries are weak or soft references
>    to JSR-223 CompiledScript instances (and some time stamp to help
>    decide for recompilation)

Ok. I think this cache should also have some form of size limitation -
maybe simply limit the total number of CompiledScript instances in the
cache, and purge least recently used entries when that limit is
reached?

> ... * When trying to run a script the following steps take place:
>
>        - check for a cache entry
>        - if existing and script source is not more recent
>           than the cache entry, us it and we are done
>        - if the cache entry is outdated, remove it and continue

ok

>
>        - check whether the ScriptEngine allows precompilation.
>        - if yes: compile the script, enter it into the cache
>            and run the CompiledScript
>        - if no: just have the ScriptEngine read and run the
>            script.

ok

> This can already be easily used for our own JSP Script Engine. It may
> probably also be used for the Groovy ScriptEngine, since it supports
> script precompilation. For our own Rhino ScriptEngine we would just add
> support for this and be done.

Sound great!
-Bertrand

Reply via email to