В SQLite добавлена поддержка WASM для использования СУБД в web-браузере

Разработчики SQLite развивают проект по реализации возможности компиляции библиотеки в промежуточный код WebAssembly, способный запускаться в web-браузере и пригодный для организации работы с БД из web-приложений на языке JavaScript. Код для поддержки WebAssembly добавлен в основной репозиторий проекта. В отличие от API WebSQL, в основе которого лежит SQLite, WASM SQLite полностью изолирован от браузера и не влияет на его безопасность (Google решил отказаться от поддержки WebSQL в Chrome после нескольких уязвимостей в SQLite, которые можно было эксплуатировать через WebSQL для атаки на браузер).

Целью проекта является предоставление рабочей JavaScript-обвязки, идентичной по функциональности с API SQLite. Web-разработчикам предоставляется высокоуровневый объектно-ориентированный интерфейс для работы с данными в стиле sql.js или Node.js, обвязка над низкоуровневым C API и API на базе механизма Web Worker, позволяющий создавать асинхронные обработчики, выполняемые в отдельных потоках. Для скрытия тонкостей организации работы с потоками поверх API на базе Web Worker также развивается вариант программного интерфейса на основе механизма Promise.

Данные, которые web-приложения сохраняют в WASM-версии SQLite, могут быть локализованы в рамках текущего сеанса (теряются после перезагрузки страниц) или сохранены на стороне клиента (сохраняются между сеансами). Для постоянного хранения подготовлены бэкенды для размещения данных в локальной ФС при помощи OPFS (Origin-Private FileSystem, расширение к API File System Access, доступное пока только в браузерах на основе WebKit и Chromium) и в локальных браузерных хранилищах на базе API window.localStorage и window.sessionStorage. В случае применения localStorage/sessionStorage данные отражаются в соответствующие хранилища в формате ключ/значение, а при применении OPFS предусмотрено два варианта: симуляция виртуальной ФС при помощи WASMFS и отдельная реализация 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).

Release. Ссылка here.