De Web SQL Database API , waarmee u gegevens op een gestructureerde manier op de computer van de gebruiker kunt opslaan (intern gebaseerd op de SQLite-database-engine), werd geïntroduceerd in april 2009 en in november 2010 weer verlaten . Hoewel de API werd geïmplementeerd in WebKit (waar Safari op draait) en actief bleef in de Blink-engine (waar Chrome op draait), heeft Gecko (waar Firefox op draait) deze functie nooit geïmplementeerd en heeft WebKit deze in 2019 verwijderd .
Het World Wide Web Consortium (W3C) moedigt gebruikers die webdatabases nodig hebben aan om Web Storage API -technologieën zoals localStorage
en sessionStorage
, of IndexedDB , te gebruiken. Deze technologieën tonen hun sterke punten op het gebied van sleutel-/waardeopslag en gestructureerde data, maar hebben ook zwakke punten, zoals het ontbreken van een krachtige querytaal. Mensen willen SQL niet voor niets op het web.
Stappen voor het afschaffen en verwijderen van Web SQL
- [ Klaar.] Web SQL is verouderd en verwijderd voor contexten van derden in Chromium 97 (4 januari 2022).
- [ Klaar.] Web SQL-toegang in onveilige contexten is verouderd vanaf Chromium 105 (4 januari 2022). Op dat moment werd er een waarschuwingsbericht weergegeven in het probleemvenster van Chrome DevTools.
- [ Klaar.] Web SQL-toegang in onveilige contexten is niet langer beschikbaar vanaf Chromium 110 (4 januari 2022). Een bedrijfsbeleid om de functie te blijven gebruiken is beschikbaar van Chromium 110 (4 januari 2022) tot Chromium 123 (4 januari 2022).
- [ Klaar.] Web SQL-toegang is in alle contexten verouderd vanaf Chromium 115 (4 januari 2022) en er wordt een waarschuwingsbericht weergegeven in het probleemvenster van Chrome DevTools.
- [ verouderingsproefversie om Web SQL te kunnen blijven gebruiken, is beschikbaar van Chromium 117 (4 januari 2022) naar Chromium 123 (4 januari 2022). Zie Aan de slag met oorsprongsproeven voor meer informatie over verouderingsproefversies. Klaar.] Een
- [ Klaar.] Web SQL-toegang in alle contexten is niet langer beschikbaar vanaf Chromium 119 .
Waarheen nu?
Zoals in de inleiding aangegeven, zijn Web Storage API -technologieën zoals localStorage
en sessionStorage
, of de IndexedDB- standaard in veel gevallen goede alternatieven, maar zeker niet in alle gevallen.
Reden voor het overlaten van opslag aan webontwikkelaars
Met de komst van Wasm kunnen SQL- of NoSQL-oplossingen naar het web komen. Een voorbeeld is DuckDB-Wasm , een ander is absurd-sql . Op basis van deze creaties zijn we van mening dat de ontwikkelaarscommunity sneller en beter nieuwe opslagoplossingen kan ontwikkelen en creëren dan browserleveranciers.
We zijn niet van plan om Web SQL zomaar te verwijderen. Sterker nog, we hebben het vervangen door iets dat door de open-sourcecommunity wordt onderhouden, als een pakket dat naar wens kan worden bijgewerkt – zonder de last van het rechtstreeks in browsers implementeren van oplossingen en nieuwe functies. Ons doel is echt om ontwikkelaars hun eigen database naar het web te laten brengen.
Bovendien hopen we dat dit voorbeeld een nieuw ecosysteem van open-sourcedatabases tot bloei zal brengen! De release van toegangshandles voor bestandssystemen biedt eindelijk de nieuwe basis waarop aangepaste opslagoplossingen kunnen worden gebouwd.
Redenen om Web SQL af te schaffen
Bezorgdheid over duurzaamheid en veiligheid
De Web SQL-specificatie kan niet duurzaam worden geïmplementeerd, wat innovatie en nieuwe functies beperkt. De laatste versie van de standaard stelt letterlijk: "Gebruikersagenten moeten het SQL-dialect implementeren dat wordt ondersteund door SQLite 3.6.19" .
SQLite was oorspronkelijk niet ontworpen om kwaadaardige SQL-instructies uit te voeren, maar de implementatie van Web SQL betekent dat browsers precies dit moeten doen. De noodzaak om up-to-date te blijven met beveiligings- en stabiliteitsupdates vereist het bijwerken van SQLite in Chromium. Dit botst direct met de vereiste van Web SQL om zich precies zo te gedragen als SQLite 3.6.19.
API-vorm
Web SQL is ook een API die zijn leeftijd laat zien. Het stamt uit de late jaren 2000 en is een prachtig voorbeeld van "callback hell", zoals het volgende codevoorbeeld ( met dank aan Nolan Lawson ) laat zien. Zoals u kunt zien, worden de SQL-instructies (met behulp van het SQLite SQL-dialect) als strings doorgegeven aan databasemethoden.
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!');
},
);
},
);
Als u deze code uitvoert en de gemaakte tabel inspecteert met Chrome DevTools , is dit het resultaat:
Gebrek aan ondersteuning van de implementator
Afgezien van de obscure API-vorm (in ieder geval vanuit een hedendaags perspectief) had Mozilla veel bedenkingen bij het feit dat Web SQL op SQLite zou worden gebouwd:
"Wij denken niet dat [SQLite] de juiste basis is voor een API die beschikbaar is voor algemene webcontent, niet in de laatste plaats omdat er geen geloofwaardige, breed geaccepteerde standaard is die SQL op een nuttige manier onderverdeelt. Bovendien willen we niet dat wijzigingen in SQLite later gevolgen hebben voor het web, en vinden we het niet verstandig om grote browserreleases (en een webstandaard) te gebruiken voor SQLite."
U kunt meer lezen over Mozilla's zorgen in de blogpost van voormalig Mozillaan Vladimir Vukićević . Voor meer achtergrondinformatie kunt u de notulen van de W3C Web Applications Working Group raadplegen (en als u echt in de details wilt duiken, lees dan de IRC-logs ) en de archieven van de mailinglijst . Daarnaast biedt de blogpost van Nolan Lawson een goed overzicht van wat er is gebeurd.
Feedback
Als u bedenkingen heeft over de in dit bericht beschreven stappen voor veroudering, laat het ons dan weten via de blink-dev mailinglijst . Lidmaatschap van deze groep staat open voor iedereen en iedereen mag berichten plaatsen.
Gerelateerde links
- ChromeStatus-item: WebSQL in contexten van derden afkeuren en verwijderen
- ChromeStatus-item: WebSQL afkeuren en verwijderen in niet-beveiligde contexten
- Intentie om te depreceren en te verwijderen: WebSQL in contexten van derden
- Intentie om te depreceren en te verwijderen: WebSQL in niet-beveiligde contexten
- Chromium-probleem: WebSQL in contexten van derden afkeuren en verwijderen
- Chromium-probleem: WebSQL afkeuren en verwijderen in onveilige contexten
- Chromium-probleem: WebSQL afkeuren en verwijderen (Window#openDatabase)
- SQLite Wasm in de browser ondersteund door het Origin Private File System
Dankbetuigingen
Dit artikel is beoordeeld door Joe Medley , Ben Morss en Joshua Bell .