JS给我带来最大困扰的局限性之一就是隔离代码执行能力差。
我希望能够控制执行代码的上下文,可以实现与node.js中的Script.createContext
和Script.runInContext
类似的效果(节点使用绑定到V8引擎,所以我无法模拟其实现)。
这是我想隔离代码执行的某些原因:
window
对象以及DOM
)中隔离代码,但是我需要能够对上下文中公开的对象进行引用函数调用,这些对象必须同步执行,这几乎是不可能的使用WebWorker
进行隔离。我知道可以通过将脚本加载到iframe
中来实现部分隔离的执行,但是这种方法非常繁琐,并且将大量内存用于DOM的第二个实例,这对于我要执行的操作并不需要。
我需要共享构造函数定义,还需要在隔离的容器/上下文之间共享的对象定义,这两个容器/上下文都必须在主UI线程上运行。我主要是想使用这些隔离的容器来托管插件/模块(微型应用程序),每个插件/模块都通过在其自己的Context2D
对象上调用绘图命令来呈现和动态更新视口。
如果这些容器未在主UI线程上运行,那么很难代理诸如ctx.measureText()
和ctx.drawImage()
之类的调用,因为它们无法在Worker
中创建图像对象,因此将变得毫无用处。
有人知道将来的规范可以使之成为可能吗?
是否有任何当前(隐藏的)浏览器端API可以用来实现此目的?
最好使用像Goggle的Dart VM这样的虚拟机并重新实现我当前的代码库吗?我当前的代码库略高于2万行代码。
最好在*中重新实现框架>
JS给我带来最大困扰的局限性之一就是隔离代码执行能力差。我希望能够控制执行代码的上下文,可以实现...
我为此看到的最接近的库是Caja。
您可以使用简单的自执行函数对象将代码与全局名称空间隔离:
“标准”命名选项吗?喜欢:
您是否不能像提到的其他答案一样使用闭包,然后使用影子dom来确保用户无法进入dom的其余部分?像这样的东西:
[proposal for Realms API,似乎可以解决类似的问题。它仍在讨论中,但已经有一个polyfill-realms-shim。