Ritiro e rimozione di SQL web

L'API Web SQL Database, che ti consente archiviare i dati in modo strutturato sul computer dell'utente (internamente in base il motore del database SQLite), è introdotta nell'aprile del 2009 e abbandonati a novembre 2010. Sebbene sia stato implementato in WebKit (che è alla base di Safari) ed è rimasto attivo in il motore Blink (alla base di Chrome), Gecko (che è alla base di Firefox) mai ha implementato questa funzionalità WebKit lo ha rimosso nel 2019.

World Wide Web Consortium (W3C) incoraggi a chi necessita di database web API Web Storage tecnologie come localStorage e sessionStorage, o IndexedDB. Queste tecnologie mostrano i loro punti di forza in termini di store chiave/valore e strutturati, ma che certamente presentano anche punti deboli come la mancanza di un un linguaggio di query efficace. C'è un motivo per cui le persone vogliono SQL sul web.

Passaggi per il ritiro e la rimozione di SQL web

  • [ Fine.] SQL web è stato deprecato e rimosso per i contesti di terze parti in Chromium 97 ( 4 gennaio 2022).
  • [ Fine.] L'accesso SQL web in contesti non sicuri è stato deprecato a partire dal giorno Chromium 105 ( 4 gennaio 2022), nel momento in cui verrà visualizzato un messaggio di avviso. è mostrato nel riquadro Problemi di Chrome DevTools.

Il riquadro Problemi di Chrome DevTools con un avviso che legge SQL web in contesti non sicuri è deprecato.

  • [ Fine.] L'accesso SQL web in contesti non sicuri non è più disponibile a partire da Chromium 110 ( 4 gennaio 2022). Un criterio aziendale di continuare a utilizzare questa funzionalità è disponibile da Chromium 110 ( del 4 gennaio 2022) a Chromium 123 ( 4 gennaio 2022).
  • [ Fine.] L'accesso SQL web in tutti i contesti è deprecato a partire dal giorno Chromium 115 ( 4 gennaio 2022) e viene mostrato un messaggio di avviso nel riquadro Problemi di Chrome DevTools.
  • [ Fine.] R prova relativa al ritiro per continuare a utilizzare SQL web era disponibile su Chromium 117 ( dal 4 gennaio 2022) a Chromium 123 ( 4 gennaio 2022). Per scoprire di più sulle prove relative al ritiro, consulta Inizia a utilizzare le prove dell'origine.
  • [ Fine.] L'accesso SQL web in tutti i contesti non è più disponibile da Chromium 119.

Come procedere

Come sottolineato nell'introduzione, API Web Storage tecnologie come localStorage: e sessionStorage, o il IndexedDB sono buone alternative in molti casi, ma non in tutti i casi.

Ragionamento per lasciare spazio di archiviazione agli sviluppatori web

Con l'avvento di Wasm, le soluzioni SQL o NoSQL possono arrivare sul web. Un esempio è DuckDB-Wasm, un'altra è asurd-sql. Sulla base di queste creazioni, riteniamo che la community degli sviluppatori possa eseguire l'iterazione e creare nuovo spazio di archiviazione più rapide e migliori rispetto ai fornitori di browser.

Non abbiamo intenzione di rimuovere solo SQL web. Infatti, l'abbiamo sostituita qualcosa che verrà gestito dalla community open source, distribuito come un pacchetto può essere aggiornato a piacimento, senza l'onere di introdurre correzioni e nuove funzionalità direttamente nei browser. Il nostro obiettivo è far sì che gli sviluppatori il tuo database sul web.

Inoltre, ci auguriamo che questo esempio aiuti un nuovo ecosistema di open source per prosperare. Il rilascio di handle di accesso al file system infine, fornisce la nuova primitiva su cui è possibile eseguire soluzioni di archiviazione personalizzate l'IA generativa.

Motivi per il ritiro di SQL web

Problemi di sostenibilità e sicurezza

La specifica SQL web non può essere implementata in modo sostenibile, il che limita innovazione e nuove funzionalità. L'ultima versione dello standard states "Gli user agent devono implementare il dialetto SQL supportato da Sqlite 3.6.19".

SQLite non era inizialmente progettato per eseguire istruzioni SQL dannose, ma implementare SQL web significa browser devono fare esattamente questo. La necessità di stare al passo con la sicurezza correzioni di stabilità richiedono l'aggiornamento di SQLite in Chromium. Entra in contatto diretto conflitto con il requisito di Web SQL di comportarsi esattamente come SQLite 3.6.19.

Forma API

Anche SQL web è un'API che mostra la sua età. Essendo un bambino di fine anni 2000, un ottimo esempio di "callback inferno", come nel seguente esempio di codice (per gentile concessione di Nolan Lawson) come dimostra. Come puoi vedere, le istruzioni SQL (utilizzando dialetto SQL SQLite) vengono passate come stringhe ai metodi di database.

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!');
      },
    );
  },
);

Se eseguissi questo codice esaminare la tabella creata con Chrome DevTools, questo è il risultato:

L'ispezione della sezione SQL web in Chrome DevTools mostra un database chiamato mydatabase con una tabella chiamata "pioggia" con le colonne umore (testuale) e gravità (numero intero) che ha una voce con stato cupo e gravità sei.

Mancanza di assistenza da parte dell'implementatore

A parte la forma arcana delle API (almeno dal punto di vista attuale), Mozilla aveva molti preoccupazioni su SQL web basato su SQLite:

"Non riteniamo che [SQLite] sia la base giusta per un'API esposta al web in generale dei contenuti, non meno di tutte perché non esiste un modello di standard che sottoinsiemi l'SQL in modo utile. Inoltre, non vogliamo che vengano apportate a SQLite per influire sul web in un secondo momento e non pensare di sfruttare i principali browser (e uno standard web) a SQLite è prudente."

Puoi trovare informazioni sulle preoccupazioni di Mozilla in il post del blog dell'ex Mozillan Vladimir Vukićević. Per saperne di più, dai un'occhiata ai Minuti del gruppo di lavoro sulle applicazioni web W3C (e, se davvero vuoi entrare nel dettaglio, leggi log IRC) e archivi delle mailing list). Inoltre, Post del blog di Nolan Lawson offre una buona panoramica di quello che è successo.

Feedback

In caso di qualunque dubbio sui passaggi per il ritiro comunicati in questo pubblica, faccelo sapere nella mailing list blink-dev. L'iscrizione a questo gruppo è aperta a tutti e chiunque può pubblicare contenuti.

Ringraziamenti

Questo articolo è stato esaminato da Joe Medley e Ben Morss e Joshua Bell.