Die Entwickler von SQLite arbeiten an einem Projekt zur Umsetzung der Möglichkeit, die Bibliothek in Zwischencode für WebAssembly zu kompilieren, der in Webbrowsern ausgeführt werden kann und für die Organisation der Arbeit mit Datenbanken aus Webanwendungen in JavaScript geeignet ist. Der Code zur Unterstützung von WebAssembly wurde in das Hauptrepository des Projekts hinzugefügt. Im Gegensatz zur WebSQL-API, die auf SQLite basiert, ist WASM SQLite vollständig vom Browser isoliert und beeinflusst seine Sicherheit nicht (Google hat beschlossen, die Unterstützung von WebSQL in Chrome nach mehreren Sicherheitsanfälligkeiten in SQLite, die über WebSQL ausgenutzt werden konnten, aufzugeben).
Ziel des Projekts ist es, eine funktionale JavaScript-Bindung bereitzustellen, die mit der SQLite-API identisch ist. Webentwicklern wird eine hochgradig objektorientierte Schnittstelle für die Arbeit mit Daten im Stil von sql.js oder Node.js zur Verfügung gestellt, eine Bindung über die niedrigere C-API und das API auf Basis des Web Worker-Mechanismus, das die Erstellung asynchroner Handler ermöglicht, die in separaten Threads ausgeführt werden. Um die Feinheiten der Arbeit mit Threads über die API auf Basis von Web Worker zu verbergen, wird auch eine Variante der Programmierschnittstelle auf Basis des Promise-Mechanismus entwickelt.
Daten, die Webanwendungen in der WASM-Version von SQLite speichern, können im aktuellen Sitzungskontext lokalisiert werden (sie gehen nach dem Neuladen der Seiten verloren) oder auf der Clientseite gespeichert werden (sie bleiben zwischen den Sitzungen erhalten). Für die dauerhafte Speicherung sind Backends vorbereitet, um Daten im lokalen Dateisystem mithilfe von OPFS (Origin-Private FileSystem, eine Erweiterung der File System Access API, die bisher nur in WebKit- und Chromium-basierten Browsern verfügbar ist) und in lokalen Browser-Speichern auf Basis der API window.localStorage und window.sessionStorage zu speichern. Im Falle der Verwendung von localStorage/sessionStorage werden die Daten in den entsprechenden Stores im Schlüssel/Wert-Format reflektiert, und bei der Verwendung von OPFS sind zwei Optionen vorgesehen: Simulation eines virtuellen Filesystems mithilfe von WASMFS und eine separate Implementierung von sqlite3_vfs, die eine SQLite VFS-Schicht auf Basis von OPFS bietet.
Für den Build von SQLite in der WASM-Darstellung wird der Emscripten-Compiler verwendet (es reicht aus, die Erweiterung ext/wasm zu erstellen: „./configure --enable-all; make sqlite3.c; cd ext/wasm; make“). Am Ende entstehen die Dateien sqlite3.js und sqlite3.wasm, die in Ihr JavaScript-Projekt eingebunden werden können (Beispiel für HTML und JavaScript).
Quelle: opennet.ru
