Web SQL afschaffen en verwijderen

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.

Het paneel Chrome DevTools-problemen met een waarschuwing waarin Web SQL in niet-beveiligde contexten wordt gelezen, is verouderd.

  • [ 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.
  • [ We zijn hier.] Er is een 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.

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:

Bij het inspecteren van de Web SQL-sectie in Chrome DevTools wordt een database weergegeven met de naam mydatabase met een tabel met de naam rainstorms met de kolommen stemming (tekstueel) en ernst (geheel getal) met één vermelding met een stemming van somber en een ernst van zes.

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 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.

Dankbetuigingen

Dit artikel is beoordeeld door Joe Medley en Ben Morss , en Joshua Bell .