Menghentikan penggunaan dan menghapus Web SQL

Web SQL Database API, yang dapat Anda gunakan untuk menyimpan data secara terstruktur di komputer pengguna (secara internal berdasarkan mesin database SQLite), adalah diperkenalkan pada April 2009 dan diabaikan pada November 2010. Sementara itu diimplementasikan di WebKit (yang mendukung Safari) dan tetap aktif di mesin Blink (yang menggerakkan Chrome), Gecko (yang menggerakkan Firefox) tidak pernah menerapkan fitur ini dan WebKit menghapusnya pada tahun 2019.

Konsorsium {i>World Wide Web<i} (W3C) anjuran mereka yang membutuhkan {i> database<i} web untuk mengadopsi Web Storage API teknologi seperti localStorage dan sessionStorage, atau IndexedDB. Teknologi ini menunjukkan kekuatannya dalam hal penyimpanan kunci/nilai dan data terstruktur, tetapi juga diakui memiliki kelemahan seperti kurangnya {i>strong query language<i}. Orang-orang menginginkan SQL di web karena suatu alasan.

Langkah-langkah penghapusan dan penghentian penggunaan SQL Web

  • [ Selesai.] Web SQL tidak digunakan lagi dan dihapus untuk konteks pihak ketiga pada Chromium 97 ( 4 Januari 2022).
  • [ Selesai.] Akses SQL web dalam konteks yang tidak aman tidak digunakan lagi mulai Chromium 105 ( 4 Januari 2022) saat pesan peringatan ditunjukkan 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 SQL Web dalam konteks yang tidak aman tidak lagi tersedia mulai Chromium 110 ( 4 Januari 2022). Channel kebijakan perusahaan untuk tetap menggunakan fitur ini tersedia dari Chromium 110 ( 4 Januari 2022) ke Chromium 123 ( 4 Januari 2022).
  • [ Selesai.] Akses SQL web dalam semua konteks tidak digunakan lagi mulai Chromium 115 ( 4 Januari 2022) dan pesan peringatan ditampilkan di panel Masalah Chrome DevTools.
  • [ Selesai.] J uji coba penghentian penggunaan untuk terus menggunakan Web SQL tersedia dari Chromium 117 ( 4 Januari 2022) ke Chromium 123 ( 4 Januari 2022). Untuk mempelajari lebih lanjut uji coba penghentian penggunaan, lihat Mulai uji coba origin.
  • [ Selesai.] Akses SQL Web di semua konteks tidak lagi tersedia dari Chromium 119.

Tujuan berikutnya

Seperti yang telah disebutkan di dalam pendahuluan, Web Storage API teknologi seperti localStorage dan sessionStorage, atau IndexedDB standar adalah alternatif yang baik dalam banyak, tetapi jauh tidak semua kasus.

Alasan menyerahkan penyimpanan kepada developer web

Dengan hadirnya solusi Wasm, SQL atau NoSQL dapat hadir di web. Satu contoh adalah DuckDB-Wasm, lainnya adalah absurd-sql. Berdasarkan kreasi tersebut, kami merasa bahwa komunitas developer dapat melakukan iterasi dan membuat penyimpanan baru solusi yang lebih cepat dan lebih baik daripada vendor {i>browser<i}.

Kita tidak berencana menghapus Web SQL. Bahkan, kita menggantinya dengan sesuatu yang akan dikelola oleh komunitas {i>open source<i}, disajikan sebagai paket yang dapat diperbarui sesuai keinginan—tanpa beban memperkenalkan perbaikan dan fitur baru langsung ke browser. Tujuan kami sebenarnya adalah memungkinkan developer {i>database<i} sendiri ke web.

Terlebih lagi, kami berharap contoh ini akan membantu ekosistem baru dari {i>database<i} {i>open source<i} untuk berkembang! Rilis menangani akses sistem file menyediakan primitif baru tempat solusi penyimpanan kustom dibuat.

Alasan penghentian penggunaan Web SQL

Masalah keberlanjutan dan keamanan

Spesifikasi Web SQL tidak dapat diterapkan secara berkelanjutan, sehingga membatasi inovasi dan fitur baru. Versi terakhir dari standar secara harfiah states "Agen pengguna harus mengimplementasikan dialek SQL yang didukung oleh Sqlite 3.6.19".

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

Bentuk API

Web SQL juga merupakan API yang menunjukkan usianya. Sebagai anak di akhir tahun 2000-an, contoh yang bagus dari "{i>callback hell<i}," sebagai contoh kode berikut (milik Nolan Lawson) tunjukkan. Seperti yang Anda lihat, pernyataan SQL (menggunakan SQLite Dialek SQL) diteruskan sebagai string hingga metode {i>database<i}.

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 menunjukkan {i>database<i} bernama mydatabase yang berisi tabel yang disebut {i>rainstorms<i} dengan kolom mood (texttual) dan tingkat keparahan (integer) yang memiliki satu entri dengan mood yang suram dan tingkat keparahannya enam.

Kurangnya dukungan pelaksana

Terlepas dari bentuk API misterius (setidaknya dari sudut pandang saat ini), Mozilla banyak kekhawatiran tentang Web SQL yang dibangun berdasarkan SQLite:

"Kami rasa [SQLite] tidak menjadi dasar yang tepat untuk API yang terekspos ke web umum terutama karena tidak ada situs yang kredibel dan diterima secara luas yang membuat {i>subset<i} SQL dengan cara yang berguna. Selain itu, kita tidak ingin perubahan pada SQLite untuk memengaruhi web nanti, dan jangan berpikir untuk memanfaatkan browser utama (dan standar web) ke SQLite bersifat hati-hati."

Anda dapat membaca tentang permasalahan Mozilla di postingan blog mantan Mozillan Vladimir Vukiçevi mengubahnya. Untuk melihat riwayat lainnya, lihat Menit W3C Web Applications Working Group (dan, jika Anda ingin masuk ke detail, baca IRC Logs) dan arsip milis). Selain itu, Postingan blog Nolan Lawson memberikan gambaran umum yang baik tentang apa yang terjadi.

Masukan

Jika Anda memiliki kekhawatiran tentang langkah-langkah penghentian penggunaan yang disampaikan dalam posting, 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, dan Joshua Bell.