You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Bertrand Delacretaz <bd...@apache.org> on 2009/04/06 11:50:43 UTC
Re: Support for Java Scripting Script Precompilation (was: Support
XML-compliant script delimiter)
On Mon, Apr 6, 2009 at 11:32 AM, Felix Meschberger <fm...@gmail.com> wrote:
> Hi,
>
> Bertrand Delacretaz schrieb:
>> On Mon, Apr 6, 2009 at 11:00 AM, Felix Meschberger <fm...@gmail.com> 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
Re: Support for Java Scripting Script Precompilation
Posted by Felix Meschberger <fm...@gmail.com>.
Hi,
Bertrand Delacretaz schrieb:
> On Mon, Apr 6, 2009 at 11:32 AM, Felix Meschberger <fm...@gmail.com> wrote:
>> Hi,
>>
>> Bertrand Delacretaz schrieb:
>>> On Mon, Apr 6, 2009 at 11:00 AM, Felix Meschberger <fm...@gmail.com> 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?
Sure. And of course the limit would be configurable ;-)
I just failed to add this other restriction
Regards
Felix
>
>> ... * 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
>