我们运行多租户环境,用户可以使用Nashorn执行任意脚本。性能对我们来说非常重要,因此我们宁愿不在每个脚本eval上创建新的SimpleScriptContext
对象(甚至是新的SimpleBindings
对象)。
然而,这让我们对修改全局上下文的人开放,然后必须为其他用户/执行重用它们。例如。 Math.min = function(a,b) { return 42; }
。
冻结Math
对象是一个部分解决方案,但它似乎会减慢脚本执行速度,我们必须非常勤奋,以确保我们在任何地方都这样做。同样,创建一个新的SimpleBindings
对象以在每次执行时替换ENGINE_SCOPE
绑定是一个很大的性能损失。
我们可以选择锁定全球状态吗?还是我没有想到的任何事情?
谢谢!