Web SQL einstellen und entfernen

Die Web SQL Database API, mit der Sie um Daten strukturiert auf dem Computer des Nutzers zu speichern (intern basierend auf SQLite-Datenbankmodul) Einführung im April 2009 und ab November 2010 eingestellt. Sie wurde zwar in das WebKit, das für Safari eingesetzt wird, implementiert und blieb in die Blink-Engine (die für Chrome verwendet wird), Gecko (für Firefox) niemals diese Funktion implementiert und WebKit hat sie 2019 entfernt.

World Wide Web Consortium (W3C) fördert die Webdatenbanken benötigen, Web Storage API Technologien wie localStorage und sessionStorage oder IndexedDB. Diese Technologien zeigen ihre Stärken in Bezug auf Schlüssel/Wert-Speicher und strukturierte Daten, haben aber anerkannt auch Schwächen wie das Fehlen eines Abfragesprache verwenden. Die Leute wollen SQL im Web nicht ohne Grund.

Schritte zur Einstellung und Entfernung von Web SQL

  • [ Fertig.] Web SQL wurde eingestellt und aus Drittanbieter-Kontexten entfernt: Chromium 97 ( 4. Januar 2022).
  • [ Fertig.] Der Web SQL-Zugriff in unsicheren Kontexten wurde ab dem Chromium 105 ( ab dem 4. Januar 2022), zu welchem Zeitpunkt wurde im Bereich „Probleme“ in den Chrome-Entwicklertools angezeigt.

Der Bereich „Probleme“ in den Chrome-Entwicklertools mit der Warnung „Web SQL“ in nicht sicheren Kontexten wurde verworfen.

  • [ Fertig.] Kein Web-SQL-Zugriff in unsicheren Kontexten mehr verfügbar ab Chromium 110 ( 4. Januar 2022). Eine Unternehmensrichtlinien, um die Funktion weiterhin zu nutzen, ist verfügbar unter Chromium 110 ( vom 4. Januar 2022) an Chromium 123 übertragen ( 4. Januar 2022).
  • [ Fertig.] Der Web SQL-Zugriff wurde in allen Kontexten eingestellt ab dem Chromium 115 ( 4. Januar 2022) und eine Warnmeldung wird angezeigt. im Bereich „Probleme“ in den Chrome-Entwicklertools.
  • [ Fertig.] A Test zur Einstellung von Web SQL weiter zu verwenden war in Chromium 117 verfügbar ( vom 4. Januar 2022) an Chromium 123 ( 4. Januar 2022). Weitere Informationen zu Tests zur Einstellung finden Sie unter Erste Schritte mit Ursprungstests
  • [ Fertig.] Web SQL-Zugriff ist in allen Kontexten nicht mehr verfügbar von Chromium 119

So geht es weiter

Wie in der Einleitung erwähnt, Web Storage API Technologien wie localStorage und sessionStorage, oder die IndexedDB sind in vielen, aber bei Weitem nicht allen Fällen gute Alternativen.

Gründe dafür, dass Webentwicklern Speicherplatz zur Verfügung gestellt werden

Mit der Einführung von Wasm können SQL- oder NoSQL-Lösungen im Web eingeführt werden. Ein Beispiel ist DuckDB-Wasm, ein weiterer absurd-sql. Basierend auf diesen Kreationen Wir sind überzeugt, dass die Entwickler-Community schneller und besser als Browseranbieter.

Wir haben nicht vor, Web SQL einfach zu entfernen. Tatsächlich haben wir es durch irgendwas das von der Open-Source-Community gepflegt wird und als Paket dient, können nach Belieben aktualisiert werden, ohne dass Sie Korrekturen und neue Funktionen einführen müssen. direkt im Browser. Unser Ziel ist es, Entwicklern die Möglichkeit zu geben, eine eigene Datenbank ins Web.

Außerdem hoffen wir, dass dieses Beispiel Open-Source-Datenbanken florieren! Die Veröffentlichung von Zugriffs-Handles des Dateisystems bietet schließlich die neue Primitive, mit der sich benutzerdefinierte Speicherlösungen entwickelt.

Gründe für die Einstellung von Web SQL

Nachhaltigkeits- und Sicherheitsbedenken

Die Web SQL-Spezifikation kann nicht nachhaltig implementiert werden, was schränkt Innovationen und neue Funktionen. Die letzte Version des Standards status „User-Agents müssen Implementieren Sie den von Sqlite 3.6.19" unterstützten SQL-Dialekt.

SQLite war ursprünglich nicht die schädliche SQL-Anweisungen ausführen können. Die Implementierung von Web SQL bedeutet, genau das tun müssen. Die Notwendigkeit, mit Sicherheits- und Stabilitätskorrekturen erfordern die Aktualisierung von SQLite in Chromium. Dies kommt direkt Konflikt mit der Anforderung von Web SQL, sich genau wie SQLite 3.6.19 zu verhalten.

API-Form

Web SQL ist ebenfalls eine API, die ihr Alter anzeigt. Als Kind der späten 2000er-Jahre ein gutes Beispiel für die Rückrufhölle, wie im folgenden Codebeispiel (mit freundlicher Genehmigung von Nolan Lawson) demonstriert wird. Wie Sie sehen, werden die SQL-Anweisungen (mithilfe der SQLite-SQL-Dialekt) werden als Strings übergeben. bis hin zu Datenbankmethoden.

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!');
      },
    );
  },
);
<ph type="x-smartling-placeholder">

Wenn Sie diesen Code ausführen und die erstellte Tabelle mit den Chrome-Entwicklertools lautet das Ergebnis:

Die Überprüfung des Web SQL-Bereichs in den Chrome-Entwicklertools zeigt eine Datenbank namens mydatabase mit einer Tabelle namens „rainstorms“ mit den Spalten „Stimmung“ (Text) und „Schweregrad“ (Ganzzahl) mit einem Eintrag mit einer Stimmung von „düster“ und einem Schweregrad von sechs.

Fehlende Unterstützung durch den Implementierer

Abgesehen von der arkanen API-Form (zumindest aus heutiger Sicht), hatte viele Bedenken über Web SQL, das auf SQLite basiert:

„Wir glauben nicht, dass [SQLite] die richtige Grundlage für eine API ist, die dem allgemeinen Web nicht zuletzt deshalb, weil es keine glaubwürdigen, weithin anerkannten der SQL auf nützliche Weise unterteilt. Außerdem möchten wir keine Änderungen SQLite zu nutzen, um sich später auf das Web auszuwirken, und glaubt nicht, die Nutzung größerer Browser (und ein Webstandard) auf SQLite zu veröffentlichen.“

Weitere Informationen zu den Bedenken von Mozilla finden Sie hier: im Blogpost von Mozillan Vladimir Vukićević. Einen ausführlicheren Verlauf findest du in der W3C-Arbeitsgruppenminuten für Webanwendungen (Und wenn Sie wirklich ins Detail gehen möchten, lesen Sie die IRC-Logs) und den Mailinglisten-Archive). Außerdem Blogpost von Nolan Lawson gibt einen guten Überblick darüber, was passiert ist.

Feedback

Falls Sie Anliegen bezüglich der in diesem Dokument beschriebenen Einstellungsschritte haben veröffentlicht haben, teilen Sie uns dies auf der Mailingliste für blink-dev. Jeder kann in dieser Gruppe Mitglied werden und jeder darf posten.

Danksagungen

Dieser Artikel wurde von Joe Medley geprüft und Ben Morss und Joshua Bell