ErosZy/sablejs
Run user plugins, rules, formulas, and AI-generated JavaScript safely in browsers.
解決的問題
Sablejs 提供了一種快速且安全的方式來執行由使用者撰寫或由 AI 生成的 JavaScript 程式碼,而無需嵌入式虛擬機器的額外開銷。它解決了在保持高性能量與可調試性(透過原始碼地圖)的同時,安全地執行不受信任程式碼(沙盒化)的問題。
工作原理
Sablejs 不使用虛擬機器,而是採用 AOT(提前時間)編譯方式,將來賓 JavaScript(ES5.1)編譯成主機 JavaScript。它使用「沙盒」模式,遞迴地將純資料從主機複製到來賓環境,確保來賓程式碼中的變更無法影響主機的物件圖。主機函數會以「能力」(capabilities)的形式暴露給來賓——這些是經過中介的包裝器,可清除錯誤並複製參數與結果。
為防止無限迴圈或記憶體耗盡,建議將編譯後的程式在專用的 Web Worker 中執行,讓主機能夠強制執行時限並終止執行代理。
適用對象
需要在 Node.js、瀏覽器或其他 JavaScript 執行環境(如 Deno 和 Bun)中執行動態、使用者提供的或由 AI 生成的 JavaScript 邏輯(例如外掛系統或規則引擎)的開發者。
主要特色
AOT 編譯:將來賓程式碼編譯為主機 JS,以提升速度,避免使用嵌入式虛擬機器的方法。
安全沙盒:預設情況下防止來賓程式碼存取主機物件或平台 API(如
window或fs)。能力系統:允許主機明確授予對主機函數的窄範圍、受控存取權限。
可調試:產生 Source Map v3,用於將生成的程式碼映射回原始來賓原始碼。
Worker 隔離:內建協助工具,用於在 Worker 中執行程式以強制執行時限。
高性能量:在多項基準測試中表現優於 QuickJS-WASM(例如 V8 Benchmark Suite 7)。
相關
- 專案
- 專案
- 專案
- 專案
- 專案