gpt4 book ai didi

javascript - 隔离 JavaScript 的执行

转载 作者:可可西里 更新时间:2023-11-01 01:53:29 25 4
gpt4 key购买 nike

最让我烦恼的 JS 限制之一是隔离代码执行的能力差。

我希望能够控制执行代码的上下文,实现与节点中的 Script.createContext & Script.runInContext 类似的效果.js 确实如此(节点正在使用绑定(bind)到 V8 引擎,所以我无法模拟它们的实现)。

以下是我想要隔离代码执行的一些原因:

  1. 将代码与全局命名空间(window 对象以及 DOM)隔离开来,但是我需要能够对暴露在必须同步执行的上下文,这使得几乎不可能使用 WebWorker 进行隔离。
  2. 通过隔离代码的执行,还可以在不再需要时释放其定义(内存管理)。

我知道可以通过将脚本加载到 iframe 来实现部分隔离执行,但是这种方法非常繁重,并且为 DOM 的第二个实例使用大量内存,而这对于什么不需要我正在努力做。

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

如果这些容器不在主 UI 线程上运行,代理调用将非常困难,例如 ctx.measureText()ctx.drawImage()全部无用,因为无法在 Worker 中创建图像对象。

是否有人知道 future 的规范将使这成为可能?

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

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

在*中重新实现框架会不会更好

最佳答案

我见过的最近的图书馆是 Caja .

基本上,在非严格的 javascript 代码中,有很多方法可以访问全局对象(浏览器中的 window),这使得真正的隔离成为一个非常困难的问题。 Caja 做了一些 iframing 技巧来修补这个问题,但老实说我不太确定它是如何工作的。

关于javascript - 隔离 JavaScript 的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com