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
