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(如 windowfs)。

  • 能力系統:允許主機明確授予對主機函數的窄範圍、受控存取權限。

  • 可調試:產生 Source Map v3,用於將生成的程式碼映射回原始來賓原始碼。

  • Worker 隔離:內建協助工具,用於在 Worker 中執行程式以強制執行時限。

  • 高性能量:在多項基準測試中表現優於 QuickJS-WASM(例如 V8 Benchmark Suite 7)。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案