SQLite 添加了 WASM 支持,以便在 Web 瀏覽器中使用 DBMS

SQLite 開發人員正在開發一個項目,以實現將庫編譯為中間 WebAssembly 代碼的能力,該代碼可以在 Web 瀏覽器中運行,並且適合使用 JavaScript 語言從 Web 應用程序組織數據庫工作。 WebAssembly 支持的代碼已添加到主項目存儲庫中。 與基於 SQLite 的 WebSQL API 不同,WASM SQLite 與瀏覽器完全隔離,不會影響其安全性(在 SQLite 存在多個可通過 WebSQL 攻擊瀏覽器的漏洞後,Google 決定放棄 Chrome 中對 WebSQL 的支持) )。

該項目的目標是提供一個與 SQLite API 功能相同的有效 JavaScript 綁定。 為 Web 開發人員提供了一個高級面向對象的接口,用於以 sql.js 或 Node.js 的方式處理數據,包裝了低級 C API,以及一個基於 Web Worker 機制的 API,允許您創建在單獨線程上運行的異步處理程序。 為了隱藏在基於 Web Worker 的 API 之上使用線程組織工作的複雜性,還開發了一種基於 Promise 機制的編程接口變體。

Web 應用程序存儲在 WASM 版本的 SQLite 中的數據可以在當前會話中本地化(頁面重新加載後丟失)或客戶端持久化(在會話之間持久化)。 對於持久存儲,後端已準備好將數據放置在使用OPFS(Origin-Private FileSystem,文件系統訪問API 的擴展,目前僅在基於WebKit 和Chromium 的瀏覽器中可用)的本地文件系統和本地瀏覽器存儲中基於window.localStorage API和window.sessionStorage。 當使用 localStorage/sessionStorage 時,數據被映射到適當的鍵/值存儲,而當使用 OPFS 時,有兩個選項:使用 WASMFS 模擬虛擬文件系統,以及提供基於 OPFS 的 SQLite VFS 層的單獨 sqlite3_vfs 實現。

要將 SQLite 構建為 WASM 表示,需要使用 Emscripten 編譯器(構建 ext/wasm 擴展就足夠了:“./configure --enable-all; make sqlite3.c; cd ext/wasm; make”)。 輸出是 sqlite3.js 和 sqlite3.wasm 文件,您可以將它們包含在 JavaScript 項目中(HTML 和 JavaScript 示例)。

來源: opennet.ru

添加評論