API Web SQL Database , позволяющий структурированно хранить данные на компьютере пользователя (внутренне на основе движка базы данных SQLite), был представлен в апреле 2009 года и заброшен в ноябре 2010 года . Хотя он был реализован в WebKit (на котором работает Safari) и оставался активным в движке Blink (на котором работает Chrome), Gecko (на котором работает Firefox) никогда не реализовывал эту функцию, а WebKit удалил ее в 2019 году .
Консорциум World Wide Web (W3C) призывает тех, кому нужны веб-базы данных, принять технологии API веб-хранилищ , такие как localStorage
и sessionStorage
или IndexedDB . Эти технологии показывают свои сильные стороны, когда дело доходит до хранилищ ключей/значений и структурированных данных, но, по общему признанию, имеют и слабые стороны, такие как отсутствие сильного языка запросов. Люди хотят SQL в Интернете не просто так.
Шаги по удалению и прекращению поддержки Web SQL
- [ Готово.] Web SQL устарел и удален для сторонних контекстов в Chromium 97 (4 января 2022 г.).
- [ Готово.] Доступ к веб-SQL в небезопасных контекстах устарел, начиная с версии Chromium 105 (4 января 2022 г.), после чего на панели проблем Chrome DevTools появилось предупреждающее сообщение.
- [ Done.] Доступ к веб-SQL в небезопасных контекстах больше недоступен с Chromium 110 (4 января 2022 г.). Корпоративная политика для продолжения использования этой функции доступна с Chromium 110 (4 января 2022 г.) по Chromium 123 (4 января 2022 г.).
- [ Готово.] Доступ к веб-SQL во всех контекстах устарел, начиная с Chromium 115 (4 января 2022 г.), и на панели проблем Chrome DevTools отображается предупреждающее сообщение.
- [ Пробная версия для продолжения использования Web SQL была доступна с Chromium 117 (4 января 2022 г.) по Chromium 123 (4 января 2022 г.). Чтобы узнать больше о пробных версиях для устаревших версий, см . раздел Начало работы с пробными версиями origin . Done.]
- [ Готово.] Доступ к веб-SQL во всех контекстах больше невозможен в Chromium 119 .
Куда идти дальше
Как было отмечено во введении, технологии API веб-хранилища, такие как localStorage
и sessionStorage
, или стандарт IndexedDB, являются хорошими альтернативами во многих, но далеко не во всех случаях.
Обоснование того, что хранение данных следует доверить веб-разработчикам
С появлением Wasm решения SQL или NoSQL могут прийти в веб. Одним из примеров является DuckDB-Wasm , другим — absurd-sql . Основываясь на этих творениях, мы считаем, что сообщество разработчиков может итерировать и создавать новые решения для хранения быстрее и лучше, чем поставщики браузеров.
Мы не планируем просто удалить Web SQL. Фактически, мы заменили его чем-то , что будет поддерживаться сообществом разработчиков открытого исходного кода, и будет служить пакетом, который можно будет обновлять по желанию — без необходимости вносить исправления и новые функции непосредственно в браузеры. Наша цель на самом деле — позволить разработчикам выводить свои собственные базы данных в Интернет.
Более того, мы надеемся, что этот пример поможет процветанию новой экосистемы баз данных с открытым исходным кодом! Выпуск дескрипторов доступа к файловой системе наконец-то предоставляет новый примитив, на котором можно строить пользовательские решения для хранения данных.
Причины прекращения поддержки Web SQL
Вопросы устойчивости и безопасности
Спецификация Web SQL не может быть реализована устойчиво, что ограничивает инновации и новые функции. Последняя версия стандарта буквально гласит: «Пользовательские агенты должны реализовать диалект SQL, поддерживаемый Sqlite 3.6.19» .
SQLite изначально не был разработан для запуска вредоносных SQL-выражений, однако реализация Web SQL означает, что браузеры должны делать именно это. Необходимость идти в ногу с исправлениями безопасности и стабильности диктует обновление SQLite в Chromium. Это напрямую противоречит требованию Web SQL вести себя точно так же, как SQLite 3.6.19.
Форма API
Web SQL также является API, показывающим его возраст. Будучи детищем конца 2000-х, он является прекрасным примером «ада обратных вызовов», как демонстрирует следующий пример кода ( предоставленный Ноланом Лоусоном ). Как вы можете видеть, операторы SQL (использующие диалект SQLite SQL) передаются в методы базы данных в виде строк.
openDatabase(
// Name
'mydatabase',
// Version
1,
// Display name
'mydatabase',
// Estimated size
5000000,
// Creation callback
function (db) {
db.transaction(
// Transaction callback
function (tx) {
// Execute SQL statement
tx.executeSql(
// SQL statement
'create table rainstorms (mood text, severity int)',
// Arguments
[],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'insert into rainstorms values (?, ?)',
// Arguments
['somber', 6],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'select * from rainstorms where mood = ?',
// Arguments
['somber'],
// Success callback
function (tx, res) {
// Do something with the result
var row = res.rows.item(0);
console.log(
'rainstorm severity: ' +
row.severity +
', my mood: ' +
row.mood,
);
},
);
},
);
},
);
},
// Error callback
function (err) {
console.log('Transaction failed!: ' + err);
},
// Success callback);
function () {
console.log('Transaction succeeded!');
},
);
},
);
Если бы вы запустили этот код и проверили созданную таблицу с помощью Chrome DevTools , то получили бы следующий результат:
Отсутствие поддержки со стороны реализатора
Помимо запутанной формы API (по крайней мере, с сегодняшней точки зрения), у Mozilla было много опасений по поводу того, что Web SQL будет построен на SQLite:
«Мы не считаем, что [SQLite] является подходящей основой для API, доступного для общего веб-контента, не в последнюю очередь потому, что не существует надежного, широко распространенного стандарта, который бы разделял SQL полезным образом. Кроме того, мы не хотим, чтобы изменения в SQLite впоследствии повлияли на веб, и не считаем, что использование основных версий браузеров (и веб-стандарта) для SQLite является разумным».
О проблемах Mozilla можно прочитать в сообщении в блоге бывшего сотрудника Mozilla Владимира Вукичевича . Для более подробной истории ознакомьтесь с протоколами рабочей группы W3C Web Applications (а если вы действительно хотите вникнуть в детали, прочтите журналы IRC ) и архивы списков рассылки ). Кроме того, сообщение в блоге Нолана Лоусона дает хороший обзор того, что произошло.
Обратная связь
Если у вас есть какие-либо опасения по поводу шагов по устареванию, описанных в этом сообщении, сообщите нам об этом в списке рассылки blink-dev . Членство в этой группе открыто для всех, и любой может публиковать сообщения.
Ссылки по теме
- Запись ChromeStatus: Отменить поддержку и удалить WebSQL в сторонних контекстах
- Запись ChromeStatus: Отменить поддержку и удалить WebSQL в небезопасных контекстах
- Намерение прекратить поддержку и удалить: WebSQL в сторонних контекстах
- Намерение прекратить поддержку и удалить: WebSQL в небезопасных контекстах
- Проблема Chromium: прекращение поддержки и удаление WebSQL в сторонних контекстах
- Проблема Chromium: прекращение поддержки и удаление WebSQL в небезопасных контекстах
- Проблема с Chromium: прекращение поддержки и удаление WebSQL (Window#openDatabase)
- SQLite Wasm в браузере, поддерживаемый Origin Private File System
Благодарности
Эту статью рецензировали Джо Медли , Бен Морсс и Джошуа Белл .