Vývojáři SQLite pracují na projektu, který umožní kompilaci knihovny do meziproduktu WebAssembly, schopného běžet v webovém prohlížeči a vhodného pro práci s databázemi z webových aplikací v jazyce JavaScript. Kód pro podporu WebAssembly byl přidán do hlavního repozitáře projektu. Na rozdíl od API WebSQL, které využívá SQLite, je WASM SQLite zcela izolován od prohlížeče a nemá na něj vliv (Google se rozhodl ukončit podporu WebSQL v Chrome po několika zranitelnostech v SQLite, které bylo možné zneužít prostřednictvím WebSQL k útoku na prohlížeč).
Cílem projektu je poskytnout funkční JavaScriptové rozhraní, které je ekvivalentní API SQLite. Weboví vývojáři získají vysoce úrovňový objektově orientovaný interface pro práci s daty ve stylu sql.js nebo Node.js, půjde o obálku nad nízkoúrovňovým C API a API založené na mechanismu Web Worker, umožňující vytvářet asynchronní zpracovatele prováděné v samostatných vláknech. Pro skrytí podrobností o organizaci práce s vlákny nad API založeným na Web Worker se také vyvíjí verze programového rozhraní založeného na mechanizmu Promise.
Data, která webové aplikace ukládají do WASM verze SQLite, mohou být lokalizována v rámci aktuální relace (prohrají se po obnovení stránek) nebo ukládána na straně klienta (uchovávají se mezi relacemi). Pro trvalé uchovávání byly připraveny backendy pro ukládání dat do lokálního souborového systému pomocí OPFS (Origin-Private FileSystem, rozšíření k API File System Access, dostupné zatím jen v prohlížečích založených na WebKit a Chromium) a v místních uložištích prohlížeče založených na API window.localStorage a window.sessionStorage. V případě použití localStorage/sessionStorage jsou data ukládána do příslušných uložišť ve formátu klíč/hodnota, zatímco při použití OPFS jsou k dispozici dvě varianty: simulace virtuálního FS pomocí WASMFS a samostatná implementace sqlite3_vfs, nabízející vrstvu SQLite VFS založenou na OPFS.
Pro sestavení SQLite do WASM reprezentace byl použit překladač Emscripten (stačí sestavit rozšíření ext/wasm: „./configure --enable-all; make sqlite3.c; cd ext/wasm; make“). Na výstupu se vytvářejí soubory sqlite3.js a sqlite3.wasm, které lze zahrnout do svého JavaScriptového projektu (příklad HTML a JavaScript).
Zdroj: opennet.ru
