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模拟虚拟FS和sqlite3_vfs的单独实现,提供基于SQLite VFS层的在OPFS上。

要将 SQLite 构建到 WASM 视图中,需要使用 Emscripten 编译器(构建 ext/wasm 扩展就足够了:“./configure —enable-all; make sqlite3.c; cd ext/wasm; make”)。 输出是 sqlite3.js 和 sqlite3.wasm 文件,它们可以包含在您的 JavaScript 项目(HTML 和 JavaScript 示例)中。

来源: opennet.ru

添加评论