Share context/JS bindings
Hannes Wallnöfer
hannes.wallnoefer at oracle.com
Tue Jun 14 07:53:04 UTC 2016
Hi Axel,
The problem seems to be that bindings.clear() uses the ECMAScript delete operation to clear the bindings, and that will only delete a property if it is configurable. However, var declarations are non-configurable and therefore „survive“.
I’m not sure how to work around this, and possibly we should fix our implementation of clear to include non-configurable (declared) variables.
Regards,
Hannes
> Am 14.06.2016 um 09:09 schrieb Axel Dörfler <axeld at pinc-software.de>:
>
> Hi there,
>
> I'm trying to reduce the overhead of running JavaScript code. It looks like the best thing you can do is a) share a single engine, and b) reuse the script context.
>
> I'm using a per-thread context like this:
>
> public static ScriptContext createJavaScriptContext() {
> ScriptContext context = new SimpleScriptContext();
> Bindings bindings = perThreadGlobalScope.get();
> if (bindings == null) {
> bindings = getJavaScriptEngine().createBindings();
> perThreadGlobalScope.set(bindings);
> } else
> bindings.clear();
>
> context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
>
> return context;
> }
>
> Now I'm facing the problem that JavaScript variables are shared between different uses.
> Ie. a:
>
> var found;
> print found;
> found = 1;
>
> Would print "1" on the second run.
>
> Is there a way to avoid this?
>
> Bye,
> Axel.
More information about the nashorn-dev
mailing list