Разработчики SQLite разрабатывают проект для реализации возможность компилировать библиотеку в промежуточный код WebAssembly который может запускаться в веб-браузере и подходит для организации работы с базой данных из веб-приложений на языке JavaScript.
Цель проект заключается в предоставлении функциональной ссылки JavaScript который идентичен по функциональности SQLite API. Веб-разработчикам предоставляется высокоуровневый объектно-ориентированный интерфейс для работы с данными в стиле sql.js или Node.js, оборачивающий низкоуровневый C API и API на основе механизма Web Worker, позволяющий создавать асинхронные контроллеры, которые работают в отдельных потоках.
Чтобы скрыть сложности многопоточности через API на основе Web Worker, Вариант программный интерфейс, основанный на механизме Promise.
Данные, которые веб-приложения хранят в WASM-версии SQLite, могут быть расположены в текущем сеансе (теряются после перезагрузки страницы) или сохраняются на стороне клиента (сохраняются между сеансами).
Для постоянного хранения подготовлены серверные части для размещения данных в локальной файловой системе. с использованием OPFS (Origin-Private FileSystem, расширение API доступа к файловой системе, в настоящее время доступно только в браузерах на основе WebKit и Chromium) и локального хранилища браузера на основе API-интерфейсов window.localStorage и window.sessionStorage.
При использовании localStorage/sessionStorage данные сопоставляются с соответствующими хранилищами ключей/значений, тогда как при использовании OPFS есть два варианта: имитация виртуальной ФС с использованием WASMFS и отдельная реализация sqlite3_vfs, предлагающая слой VFS на основе SQLite. .
Компилятор Emscripten используется для сборки SQLite в представлении WASM.. Результатом являются файлы sqlite3.js и sqlite3.wasm, которые вы можете включить в свой проект JavaScript (пример HTML и JavaScript).
конкретных целей этого проекта упоминаются:
За исключением случаев, отмеченных в нецелевых целях, предоставьте более или менее полную оболочку функций для sqlite3 C API в той мере, в какой это позволяет паритет функций WASM с C. Фактически, предоставьте по крайней мере следующие API.
- Привяжите низкоуровневый sqlite3 API, максимально приближенный к нативному с точки зрения использования.
- Объектно-ориентированный API более высокого уровня, больше похожий на реализации в стиле sql.js и node.js.
- Рабочий API, который взаимодействует с вышеуказанными API через рабочие сообщения. Это предназначено для использования в основном потоке с API-интерфейсами более низкого уровня, установленными в рабочем потоке, и для связи с ними через рабочие сообщения.
- Основанный на Promise вариант Worker API, который полностью скрывает аспекты взаимодействия между потоками пользователя.
- Насколько это возможно, поддерживайте постоянное хранилище на стороне клиента с помощью доступных API JS. На момент написания этой статьи это включает исходную частную файловую систему (OPFS) и (очень ограниченное) хранилище через бэкенды window.localStorage и .window.sessionStorage.
Что касается неконкретные цели:
- Поскольку WASM — это веб-ориентированная технология, а UTF-8 — король кодировок в этой области, в настоящее время нет планов по поддержке API-интерфейсов sqlite3, связанных с UTF16.
- Хотя поддержка среды выполнения WASM вне браузера широко распространена, этот проект в настоящее время (конец 2022 г.) ориентирован только на цели браузера. Хотя детали реализации, связанные с Интернетом, имеют приоритет, а компоненты JavaScript API сосредоточены конкретно на клиентах браузера, модуль WASM более низкого уровня «должен» работать в не-веб-средах WASM.
- Совместимость со старыми или нишевыми платформами. WASM разработан для современной сети и требует современных платформ. Точно так же устаревшие параметры библиотеки sqlite3 будут полностью удалены из интерфейса WASM.
Код для поддержки WebAssembly добавлен в основной репозиторий проекта. В отличие от API WebSQL, основанного на SQLite, WASM SQLite полностью изолирован от браузера и не влияет на его безопасность (Google решила отказаться от поддержки WebSQL в Chrome после нескольких уязвимостей в SQLite, которые можно было использовать через WebSQL для атаки на Navigator). ).
наконец, если вы интересно узнать об этом больше, вы можете проверить подробности По следующей ссылке.