用于多租户的不可变全局对象

时间:2015-07-07 21:26:45

标签: nashorn

我们运行多租户环境,用户可以使用Nashorn执行任意脚本。性能对我们来说非常重要,因此我们宁愿不在每个脚本eval上创建新的SimpleScriptContext对象(甚至是新的SimpleBindings对象)。

然而,这让我们对修改全局上下文的人开放,然后必须为其他用户/执行重用它们。例如。 Math.min = function(a,b) { return 42; }

冻结Math对象是一个部分解决方案,但它似乎会减慢脚本执行速度,我们必须非常勤奋,以确保我们在任何地方都这样做。同样,创建一个新的SimpleBindings对象以在每次执行时替换ENGINE_SCOPE绑定是一个很大的性能损失。

我们可以选择锁定全球状态吗?还是我没有想到的任何事情?

谢谢!

0 个答案:

没有答案