Menghentikan penggunaan dan menghapus Web SQL

Web SQL Database API, yang memungkinkan Anda menyimpan data secara terstruktur di komputer pengguna (secara internal berdasarkan mesin database SQLite), diperkenalkan pada April 2009 dan diabaikan 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 2019.

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

Langkah-langkah penghentian dan penghapusan Web SQL

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

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

  • [ Selesai.] Akses Web SQL dalam konteks tidak aman tidak lagi tersedia mulai Chromium 110 ( 4 Januari 2022). Kebijakan perusahaan untuk terus menggunakan fitur ini tersedia mulai 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 Issue Chrome DevTools.
  • [ Kami di sini.] Uji coba penghentian penggunaan untuk terus menggunakan Web SQL tersedia mulai Chromium 117 ( 4 Januari 2022) hingga Chromium 123 ( 4 Januari 2022). Untuk mempelajari lebih lanjut uji coba penghentian penggunaan, lihat Memulai uji coba origin.

Langkah berikutnya

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

Alasan menyerahkan penyimpanan kepada developer web

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

Kami tidak berencana untuk menghapus Web SQL saja. Bahkan, kami menggantinya dengan sesuatu yang akan dikelola oleh komunitas open source, yang berfungsi sebagai paket yang dapat diupdate sesuai keinginan—tanpa beban memperkenalkan perbaikan dan fitur baru langsung ke browser. Tujuan kami sebenarnya adalah memungkinkan pengembang membawa {i>database<i} mereka sendiri ke web.

Selain itu, kami berharap contoh ini akan membantu ekosistem baru database open source untuk berkembang! Rilis tangan 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, yang membatasi inovasi dan fitur baru. Versi terakhir dari standar ini secara harfiah menyatakan "Agen pengguna harus menerapkan dialek SQL yang didukung oleh Sqlite 3.6.19".

SQLite awalnya tidak dirancang untuk menjalankan pernyataan SQL berbahaya, tetapi mengimplementasikan Web SQL berarti browser harus melakukan hal ini. Kebutuhan untuk mengikuti perbaikan keamanan dan stabilitas berarti mengupdate 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 menampilkan usianya. Sebagai anak di akhir tahun 2000-an, ini adalah contoh yang bagus dari "callback hell", seperti yang ditunjukkan contoh kode berikut (milik 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 hasilnya:

Pemeriksaan bagian Web SQL di Chrome DevTools menunjukkan database bernama mydatabase dengan tabel bernama rainstorms dengan kolom mood (tekstual) dan tingkat keparahan (bilangan bulat) yang memiliki satu entri dengan mood suram dan tingkat keparahan enam.

Kurangnya dukungan pelaksana

Selain bentuk API yang kompleks (setidaknya dari sudut pandang hari ini), Mozilla memiliki banyak kekhawatiran tentang Web SQL yang dibuat di SQLite:

"Menurut kami [SQLite] bukan dasar yang tepat untuk API yang diekspos ke konten web umum, terutama karena tidak ada standar kredibel yang diterima secara luas yang mengelompokkan SQL dengan cara yang berguna. Selain itu, kami tidak ingin perubahan pada SQLite memengaruhi web di kemudian hari, dan menurut kami penggunaan rilis browser utama (dan standar web) untuk SQLite sebaiknya tidak digunakan."

Anda dapat membaca kekhawatiran Mozilla di postingan blog sebelumnya Mozillan Vladimir Vuki?evič. Untuk mengetahui histori selengkapnya, lihat menit 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 bagus tentang apa yang terjadi.

Masukan

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

Ucapan terima kasih

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