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 verlaten in november 2010 . Hoewel het werd geïmplementeerd in WebKit (die Safari aanstuurt) en actief bleef in de Blink-engine (die Chrome aanstuurt), heeft Gecko (die Firefox aanstuurt) deze functie nooit geïmplementeerd en heeft WebKit deze in 2019 verwijderd .
Het World Wide Web Consortium (W3C) moedigt degenen die webdatabases nodig hebben aan om API-technologieën voor webopslag te gebruiken, zoals localStorage
en sessionStorage
, of IndexedDB . Deze technologieën tonen hun sterke punten als het gaat om sleutel-/waardeopslag en gestructureerde gegevens, maar hebben uiteraard ook zwakke punten, zoals het ontbreken van een krachtige zoektaal. Mensen willen niet voor niets SQL op internet.
Stappen voor het beëindigen en verwijderen van Web SQL
- [ Done.] Web SQL is verouderd en verwijderd voor contexten van derden in Chromium 97 (4 januari 2022).
- [ Done.] Web SQL-toegang in onveilige contexten is beëindigd vanaf Chromium 105 (4 januari 2022). Op dat moment werd er een waarschuwingsbericht weergegeven in het Chrome DevTools Issue-paneel.
- [ Klaar.] Web SQL-toegang in onveilige contexten is niet langer beschikbaar vanaf Chromium 110 (4 januari 2022). Er is een ondernemingsbeleid beschikbaar om de functie te blijven gebruiken vanaf Chromium 110 (4 januari 2022) tot Chromium 123 (4 januari 2022).
- [ Done.] Web SQL-toegang in alle contexten is beëindigd vanaf Chromium 115 (4 januari 2022) en er wordt een waarschuwingsbericht weergegeven in het Chrome DevTools Issue-paneel.
- [ beëindigingsproef beschikbaar om Web SQL te blijven gebruiken van Chromium 117 (4 januari 2022) tot Chromium 123 (4 januari 2022). Zie Aan de slag met origin-proefversies voor meer informatie over beëindigingsproeven. Klaar.] Er was een
- [ Klaar.] Web SQL-toegang in alle contexten is niet langer beschikbaar vanuit Chromium 119 .
Waar moet je heen vanaf hier
Zoals in de inleiding werd opgemerkt, zijn Web Storage API- technologieën zoals localStorage
en sessionStorage
, of de IndexedDB- standaard in veel, maar lang niet alle gevallen, goede alternatieven.
Reden om opslag over te laten aan webontwikkelaars
Met de komst van Wasm kunnen SQL- of NoSQL-oplossingen op internet komen. Een voorbeeld is DuckDB-Wasm , een ander is absurd-sql . Op basis van deze creaties zijn we van mening dat de ontwikkelaarsgemeenschap sneller en beter nieuwe opslagoplossingen kan ontwikkelen en ontwikkelen dan browserleveranciers.
We zijn niet van plan om Web SQL zomaar te verwijderen. In feite hebben we het vervangen door iets dat zal worden onderhouden door de open source-gemeenschap, dat diende als een pakket dat naar believen kan worden bijgewerkt, zonder de last van het rechtstreeks in browsers introduceren van oplossingen en nieuwe functies. Ons doel is eigenlijk om ontwikkelaars hun eigen database op internet te laten brengen.
Bovendien hopen we dat dit voorbeeld een nieuw ecosysteem van open source databases zal helpen bloeien! De release van toegangshandvatten voor bestandssystemen biedt eindelijk de nieuwe basis waarop aangepaste opslagoplossingen kunnen worden gebouwd.
Redenen voor het afschaffen van Web SQL
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 aanvankelijk 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 gelijke tred te houden met beveiligings- en stabiliteitsoplossingen dicteert het updaten van SQLite in Chromium. Dit komt in direct conflict met de eis 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. Als kind van eind jaren 2000 is het een geweldig voorbeeld van de '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 zou uitvoeren en de gemaakte tabel zou inspecteren met Chrome DevTools , is dit het resultaat:
Gebrek aan ondersteuning door uitvoerders
Afgezien van de geheimzinnige API-vorm (althans vanuit het perspectief van vandaag), had Mozilla veel zorgen over het feit dat Web SQL op SQLite zou worden gebouwd:
"We denken niet dat SQLite de juiste basis is voor een API die wordt blootgesteld aan algemene webinhoud, niet in de laatste plaats omdat er geen geloofwaardige, algemeen aanvaarde standaard is die SQL op een bruikbare manier onderverdeelt. Bovendien doen we dat niet" Ik wil niet dat wijzigingen in SQLite later invloed hebben op het web, en denk niet dat het verstandig is om grote browserreleases (en een webstandaard) voor SQLite te gebruiken."
U kunt over de zorgen van Mozilla lezen in de blogpost van voormalig Mozillan Vladimir Vukićević . Voor wat meer geschiedenis kunt u de notulen van de W3C Web Applications Working Group raadplegen (en als u echt op de details wilt ingaan, lees dan de IRC-logboeken ) en de mailinglijstarchieven ). Bovendien geeft de blogpost van Nolan Lawson een goed overzicht van wat er is gebeurd.
Feedback
Als u zich zorgen maakt over de beëindigingsstappen die in dit bericht worden gecommuniceerd, kunt u ons dit laten weten via de blink-dev mailinglijst . Het lidmaatschap van deze groep staat open voor iedereen en iedereen mag berichten plaatsen.
Gerelateerde links
- ChromeStatus-invoer: WebSQL afschaffen en verwijderen in contexten van derden
- ChromeStatus-invoer: WebSQL afschaffen en verwijderen in niet-beveiligde contexten
- Intentie om af te schaffen en te verwijderen: WebSQL in contexten van derden
- Intentie om af te schaffen en te verwijderen: WebSQL in niet-beveiligde contexten
- Chromium-probleem: WebSQL afschaffen en verwijderen in contexten van derden
- Chromium-probleem: WebSQL afschaffen en verwijderen in onveilige contexten
- Chromium-probleem: WebSQL (Window#openDatabase) afschaffen en verwijderen
- SQLite Wasm in de browser ondersteund door het Origin Private File System
Dankbetuigingen
Dit artikel is beoordeeld door Joe Medley en Ben Morss , en Joshua Bell .