Menghentikan penggunaan dan menghapus Web SQL

Web SQL Database API, yang memungkinkan Anda menyimpan data secara terstruktur di komputer pengguna (secara internal didasarkan pada mesin database SQLite), diperkenalkan pada April 2009 dan dihentikan pada November 2010. Meskipun diterapkan di WebKit (yang mendukung Safari) dan tetap aktif di mesin Blink (yang mendukung Chrome), Gecko (yang mendukung Firefox) tidak pernah menerapkan fitur ini dan WebKit menghapusnya pada tahun 2019.

World Wide Web Consortium (W3C) menyarankan pengguna yang membutuhkan database web untuk mengadopsi teknologi Web Storage API seperti localStorage dan sessionStorage, atau IndexedDB. Teknologi ini menunjukkan kekuatannya dalam hal penyimpanan nilai kunci dan data terstruktur, tetapi juga memiliki kelemahan seperti kurangnya bahasa kueri yang kuat. Ada alasan mengapa orang menginginkan SQL di web.

Langkah-langkah penghapusan dan penghentian penggunaan SQL Web

  • [ Selesai.] Web SQL tidak digunakan lagi dan dihapus untuk konteks pihak ketiga di Chromium 97 ( 4 Januari 2022).
  • [ Selesai.] Akses Web SQL dalam konteks yang tidak aman tidak digunakan lagi mulai Chromium 105 ( 4 Januari 2022) saat pesan peringatan ditampilkan di panel Masalah Chrome DevTools.

Panel Masalah Chrome DevTools dengan peringatan yang membaca Web SQL dalam konteks yang tidak aman tidak digunakan lagi.

  • [ Selesai.] Akses Web SQL dalam konteks yang tidak aman tidak lagi tersedia mulai Chromium 110 ( 4 Januari 2022). Kebijakan perusahaan untuk terus menggunakan fitur ini tersedia dari Chromium 110 ( 4 Januari 2022) hingga Chromium 123 ( 4 Januari 2022).
  • [ Selesai.] Akses Web SQL di semua konteks tidak digunakan lagi mulai Chromium 115 ( 4 Januari 2022) dan pesan peringatan ditampilkan di panel Masalah Chrome DevTools.
  • [ Selesai.] Uji coba penghentian penggunaan untuk terus menggunakan Web SQL tersedia dari Chromium 117 ( 4 Januari 2022) hingga Chromium 123 ( 4 Januari 2022). Untuk mempelajari lebih lanjut uji coba penghentian penggunaan, lihat Memulai uji coba origin.
  • [ Selesai.] Akses Web SQL di semua konteks tidak lagi tersedia dari Chromium 119.

Tujuan berikutnya

Seperti yang disebutkan dalam pengantar, teknologi Web Storage API seperti localStorage dan sessionStorage, atau standar IndexedDB adalah alternatif yang bagus dalam banyak kasus, tetapi sejauh ini tidak semua kasus.

Alasan untuk menyerahkan penyimpanan kepada developer web

Dengan munculnya Wasm, solusi SQL atau NoSQL dapat hadir di web. Salah satu contohnya adalah DuckDB-Wasm, contoh lainnya adalah absurd-sql. Berdasarkan kreasi ini, kami merasa bahwa komunitas developer dapat melakukan iterasi dan membuat solusi penyimpanan baru lebih cepat dan lebih baik daripada vendor browser.

Kami tidak berencana untuk menghapus Web SQL saja. Faktanya, kami menggantinya dengan sesuatu yang akan dikelola oleh komunitas open source, yang ditayangkan sebagai paket yang dapat diupdate sesuka hati—tanpa beban untuk memperkenalkan perbaikan dan fitur baru langsung ke browser. Tujuan kami sebenarnya adalah memungkinkan developer membawa database mereka sendiri ke web.

Selain itu, kami berharap contoh ini akan membantu ekosistem database open source baru berkembang. Rilis handle akses sistem file akhirnya menyediakan primitif baru tempat solusi penyimpanan kustom dapat dibuat.

Alasan penghentian Web SQL

Masalah keberlanjutan dan keamanan

Spesifikasi Web SQL tidak dapat diterapkan secara berkelanjutan, sehingga membatasi inovasi dan fitur baru. Versi terakhir standar ini secara literal menyatakan "Agen pengguna harus menerapkan dialek SQL yang didukung oleh Sqlite 3.6.19".

SQLite awalnya tidak dirancang untuk menjalankan pernyataan SQL berbahaya, tetapi menerapkan Web SQL berarti browser harus melakukan hal ini. Kebutuhan untuk mengikuti perbaikan keamanan dan stabilitas menentukan update SQLite di Chromium. Hal ini bertentangan langsung dengan persyaratan Web SQL untuk berperilaku sama persis dengan SQLite 3.6.19.

Bentuk API

Web SQL juga merupakan API yang sudah tidak digunakan lagi. Sebagai turunan dari akhir tahun 2000-an, ini adalah contoh bagus dari "callback hell", seperti yang ditunjukkan oleh contoh kode berikut (atas izin Nolan Lawson). Seperti yang dapat Anda lihat, pernyataan SQL (menggunakan dialek SQL SQLite) diteruskan sebagai string ke metode 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!');
      },
    );
  },
);

Jika Anda menjalankan kode ini dan memeriksa tabel yang dibuat dengan Chrome DevTools, ini adalah hasilnya:

Memeriksa bagian Web SQL di Chrome DevTools akan menampilkan database bernama mydatabase dengan tabel bernama rainstorms dengan kolom mood (tekstual) dan severity (bilangan bulat) yang memiliki satu entri dengan mood somber dan severity enam.

Kurangnya dukungan pelaksana

Selain bentuk API yang rumit (setidaknya dari sudut pandang saat ini), Mozilla memiliki banyak kekhawatiran tentang Web SQL yang dibuat berdasarkan SQLite:

"Kami tidak yakin [SQLite] adalah dasar yang tepat untuk API yang diekspos ke konten web umum, terutama karena tidak ada standar yang kredibel dan diterima secara luas yang membuat subset SQL dengan cara yang berguna. Selain itu, kami tidak ingin perubahan pada SQLite memengaruhi web di lain waktu, dan tidak berpikir bahwa memanfaatkan rilis browser utama (dan standar web) ke SQLite adalah hal yang bijaksana."

Anda dapat membaca kekhawatiran Mozilla di postingan blog mantan Mozillan Vladimir Vukićević. Untuk mengetahui sejarah selengkapnya, lihat notulen Grup Kerja Aplikasi Web W3C (dan, jika Anda benar-benar ingin mengetahui detailnya, baca log IRC) dan arsip milis). Selain itu, postingan blog Nolan Lawson memberikan ringkasan yang baik tentang apa yang terjadi.

Masukan

Jika Anda memiliki masalah terkait langkah penghentian penggunaan yang disampaikan dalam postingan ini, beri tahu kami di milis blink-dev. Keanggotaan dalam grup ini terbuka untuk siapa saja, dan siapa saja diizinkan untuk memposting.

Ucapan terima kasih

Artikel ini ditinjau oleh Joe Medley dan Ben Morss, serta Joshua Bell.