ErosZy/sablejs
Run user plugins, rules, formulas, and AI-generated JavaScript safely in browsers.
它解决了什么问题
Sablejs 提供了一种快速且安全的方式,用于执行由用户编写或由 AI 生成的 JavaScript 代码,而无需嵌入虚拟机的开销。它解决了在保持高性能和可调试性(通过源映射)的同时,安全地运行不受信任代码(沙箱化)的问题。
它如何工作
与使用虚拟机不同,sablejs 采用 AOT(提前编译)方式,将客机 JavaScript(ES5.1)编译为宿主机 JavaScript。它使用一种「沙箱」模式,递归地将纯数据从宿主机复制到客机,确保客机代码中的任何修改都无法影响宿主机的对象图。宿主机函数以「能力」的形式暴露给客机——这些是经过中介的包装器,可清理错误并复制参数/结果。
为防止无限循环或内存耗尽,建议在专用的 Web Worker 中运行编译后的程序,使宿主机能够强制执行时钟时间超时并终止执行代理。
适用于谁
需要在 Node.js、浏览器或其他 JS 运行时(如 Deno 和 Bun)中执行动态、用户提供的或 AI 生成的 JavaScript 逻辑(例如插件系统或规则引擎)的开发者。
特色亮点
AOT 编译:将客机代码编译为宿主机 JS,以实现速度优势,避免使用嵌入式虚拟机的方法。
安全沙箱:默认情况下阻止客机代码访问宿主机对象或平台 API(如
window或fs)。能力系统:允许宿主机显式授予对宿主机函数的狭窄、受控访问。
可调试:生成 Source Map v3,用于将生成的代码映射回原始客机源码。
Worker 隔离:内置辅助工具,用于在 Worker 中运行程序以强制执行超时。
高性能:在多个基准测试中表现优于 QuickJS-WASM(例如 V8 Benchmark Suite 7)。
相关
- 项目
- 项目
- 项目
- 项目
- 项目