关于 sqlite3 WASM/JS 子项目

WebAssembly,也称为 WASM,是一种标准,定义了一种低级编程语言,适合 (A) 作为从许多其他语言交叉编译的目标,以及 (B) 通过浏览器中的虚拟机运行。它考虑到通过 JavaScript 进行脚本编写,提供了一种将 C 代码(以及其他代码)编译为 WASM 并通过 JavaScript 对其进行脚本编写的方法,尽管 JavaScript 和 C 之间存在巨大差异,但摩擦相对较小。

人们从 早在 2012 年就开始为 Web 构建 sqlite3,但此子项目是第一个“正式”与 SQLite 项目相关的努力,其目标是使库的 WASM 构建成为受支持的 SQLite 可交付成果系列中的一等成员。

此项目的具体目标

此项目的具体目标包括…

具体非目标

我们特别打算实现的目标

归属

一些项目在我们的发展道路上给予了极大的帮助。我们非常感谢(按照我们调查的顺序)…

Emscripten

https://emscripten.org

截至撰写本文时,Emscripten WASM 工具链是唯一可用的功能齐全的 WASM 工具链。尽管存在其他工具链,但 Emscripten 提供了一些其他工具链没有的“杀手级特性”,最值得注意的是对 POSIX 文件 I/O API 的透明仿真,这允许 sqlite3 在 WASM 构建中按原样运行,无需任何更改或调整。

此外,Emscripten 开发人员在 基于 OPFS 的功能的开发过程中提供了宝贵的支持。

sql.js

https://github.com/sql-js/sql.js

Alon Zakai 的 sql.js 是此代码开发中的一个重要垫脚石,因为它演示了如何处理一些与 WASM 相关的“巫术”(例如处理指向指针的指针和添加 C 绑定回调函数的 JS 实现)。但是,这些 API 的形状与 sql.js 大不相同。

据我们所知,sql.js第一个发布的用于 Web 的 sqlite3

absurd-sql

https://github.com/jlongster/absurd-sql

James Long 的恰如其分地命名为 absurd-sql 通过将数据库存储在 IndexedDB 存储中来演示持久化的浏览器端 sqlite3。我们尝试过这种方法,但它不适合我们。即便如此,它也是一个有趣的实验。

wa-sqlite

https://github.com/rhashimoto/wa-sqlite

Roy Hashimoto 的 wa-sqlite 是第一个公开 sqlite3 的 OPFS 存储选项的项目。它还全面演示了如何使用其他方面很大程度上未记录的 OPFS API。