JavaScript的独立执行

问题描述 投票:13回答:5

JS给我带来最大困扰的局限性之一就是隔离代码执行能力差。

我希望能够控制执行代码的上下文,可以实现与node.js中的Script.createContextScript.runInContext类似的效果(节点使用绑定到V8引擎,所以我无法模拟其实现)。

这是我想隔离代码执行的某些原因:

  1. 从全局名称空间(window对象以及DOM)中隔离代码,但是我需要能够对上下文中公开的对象进行引用函数调用,这些对象必须同步执行,这几乎是不可能的使用WebWorker进行隔离。
  2. 通过隔离代码的执行,当不再需要时,也可以取消分配其定义(内存管理)。

我知道可以通过将脚本加载到iframe中来实现部分隔离的执行,但是这种方法非常繁琐,并且将大量内存用于DOM的第二个实例,这对于我要执行的操作并不需要。

我需要共享构造函数定义,还需要在隔离的容器/上下文之间共享的对象定义,这两个容器/上下文都必须在主UI线程上运行。我主要是想使用这些隔离的容器来托管插件/模块(微型应用程序),每个插件/模块都通过在其自己的Context2D对象上调用绘图命令来呈现和动态更新视口。

如果这些容器未在主UI线程上运行,那么很难代理诸如ctx.measureText()ctx.drawImage()之类的调用,因为它们无法在Worker中创建图像对象,因此将变得毫无用处。

有人知道将来的规范可以使之成为可能吗?

是否有任何当前(隐藏的)浏览器端API可以用来实现此目的?

最好使用像Goggle的Dart VM这样的虚拟机并重新实现我当前的代码库吗?我当前的代码库略高于2万行代码。

最好在*中重新实现框架>

JS给我带来最大困扰的局限性之一就是隔离代码执行能力差。我希望能够控制执行代码的上下文,可以实现...

javascript plugins module isolation
5个回答
3
投票

我为此看到的最接近的库是Caja


3
投票

您可以使用简单的自执行函数对象将代码与全局名称空间隔离:


1
投票

“标准”命名选项吗?喜欢:


0
投票

您是否不能像提到的其他答案一样使用闭包,然后使用影子dom来确保用户无法进入dom的其余部分?像这样的东西:


0
投票

[proposal for Realms API,似乎可以解决类似的问题。它仍在讨论中,但已经有一个polyfill-realms-shim

© www.soinside.com 2019 - 2024. All rights reserved.