[ 
https://issues.apache.org/jira/browse/SLING-913?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14270799#comment-14270799
 ] 

Bertrand Delacretaz commented on SLING-913:
-------------------------------------------

I haven't looked at the patch in detail but maybe using a digest of the actual 
script that's being compiled, instead of last-modified, would be useful? 
Scripts are usually small so I suspect computing the digest wouldn't add much 
to the compile time.

> Add a cache for pre-compiled scripts
> ------------------------------------
>
>                 Key: SLING-913
>                 URL: https://issues.apache.org/jira/browse/SLING-913
>             Project: Sling
>          Issue Type: New Feature
>          Components: Scripting
>    Affects Versions: Scripting Core 2.0.2
>            Reporter: Felix Meschberger
>         Attachments: SLING-913.patch
>
>
> The Java Scripting API provides support for scripting langugages which may 
> precompile script source and reuse the precompiled scripts:
>   javax.script.Compilable: May be implemented by a ScriptEngine if 
> precompilation is
>           supported
>   javax.script.CompiledScript: Result of calling the Compilable.compile 
> method.
> The CompiledScript can be called to repeatedly execute the script without the 
> need for recompilation and thus for improved performance.
> The Sling Core Scripting support should make use of this functionality by 
> maintaining a cache compiled scripts with the following properties
>   * indexed by script path
>   * size limited (using LinkedHashMap overwriting the removeEldestEntry 
> method)
>   * entries are weak or soft references ot cache entries
> A cache entry consists of the following information:
>   * The CompiledScript instance
>   * The time of last compilation. this is compared to the last modification 
> time of the script to decide on whether to recompile
> We might probaly also try to add a reference to the script engine 
> implementation bundle to only use the cache entry if the bundle has not been 
> stopped since adding the cache entry
> Executing the script would then consist of the following steps:
>   1 Check the cache of precompiled scripts. if an entry exists and can be 
> used, use it
>   2. if the ScriptEngine is Compilable:
>       2a. Compile the script and add it to the cache and use it
>       2b. Otherwise have the script engine execute the script



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to