Les développeurs de SQLite travaillent sur un projet visant à compiler la bibliothèque en code intermédiaire WebAssembly, capable de s'exécuter dans les navigateurs web et adapté à la gestion des bases de données à partir d'applications web en JavaScript. Le code pour le support de WebAssembly a été ajouté au dépôt principal du projet. Contrairement à l'API WebSQL, qui repose sur SQLite, WASM SQLite est complètement isolé du navigateur et n'affecte pas sa sécurité (Google a décidé d'abandonner le support de WebSQL dans Chrome après plusieurs vulnérabilités dans SQLite pouvant être exploitées via WebSQL pour attaquer le navigateur).
Le projet vise à fournir un wrapper JavaScript fonctionnel, identique en fonctionnalité à l'API SQLite. Il offre aux développeurs web une interface orientée objet de haut niveau pour travailler avec des données dans le style de sql.js ou Node.js, ainsi qu'un wrapper au-dessus de l'API C de bas niveau et une API basée sur le mécanisme Web Worker, permettant de créer des gestionnaires asynchrones exécutés dans des threads distincts. Pour masquer les subtilités de l'organisation du travail avec les threads via l'API basée sur Web Worker, une variante de l'interface est également développée sur la base du mécanisme Promise.
Les données que les applications web sauvegardent dans la version WASM de SQLite peuvent être localisées dans le cadre de la session en cours (elles sont perdues après le rechargement des pages) ou sauvegardées côté client (elles sont conservées entre les sessions). Des backends ont été préparés pour stocker des données dans le système de fichiers local via OPFS (Origin-Private FileSystem, une extension à l'API d'accès au système de fichiers, disponible pour le moment uniquement dans les navigateurs basés sur WebKit et Chromium) et dans les stockages locaux du navigateur via l'API window.localStorage et window.sessionStorage. En cas d'utilisation de localStorage/sessionStorage, les données sont stockées dans les réserves correspondantes au format clé/valeur, tandis qu'en utilisant OPFS, deux options sont prévues : la simulation d'un système de fichiers virtuel à l'aide de WASMFS et une implémentation distincte de sqlite3_vfs, offrant une couche SQLite VFS basée sur OPFS.
Pour assembler SQLite en représentation WASM, le compilateur Emscripten est utilisé (il suffit de construire l'extension ext/wasm : « ./configure --enable-all ; make sqlite3.c ; cd ext/wasm ; make »). À la sortie, les fichiers sqlite3.js et sqlite3.wasm sont générés, pouvant être inclus dans votre projet JavaScript (exemple HTML et JavaScript).
Source : opennet.ru
