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 penghentian penggunaan 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 yang tidak aman tidak digunakan lagi mulai Chromium 105 ( 4 Januari 2022) saat pesan peringatan ditampilkan di panel Masalah Chrome DevTools.
- [ 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.
- [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.]
- [ Selesai.] Akses Web SQL di semua konteks tidak lagi tersedia dari Chromium 119.
Tujuan berikutnya
Seperti yang ditunjukkan dalam pengantar, teknologi Web Storage API seperti localStorage
dan sessionStorage
, atau standar IndexedDB adalah alternatif yang baik dalam banyak kasus, tetapi 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, yang 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, yang 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:
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.
Link terkait
- Entri ChromeStatus: Menghentikan penggunaan dan menghapus WebSQL dalam konteks pihak ketiga
- Entri ChromeStatus: Menghentikan penggunaan dan menghapus WebSQL dalam konteks yang tidak aman
- Intent untuk Menghentikan Penggunaan dan Menghapus: WebSQL dalam konteks pihak ketiga
- Intent untuk Menghentikan Penggunaan dan Menghapus: WebSQL dalam konteks yang tidak aman
- Masalah Chromium: Menghentikan penggunaan dan menghapus WebSQL dalam konteks pihak ketiga
- Masalah Chromium: Menghentikan penggunaan dan menghapus WebSQL dalam konteks yang tidak aman
- Masalah Chromium: Menghentikan penggunaan dan menghapus WebSQL (Window#openDatabase)
- SQLite Wasm di browser yang didukung oleh Origin Private File System
Ucapan terima kasih
Artikel ini ditinjau oleh Joe Medley dan Ben Morss, serta Joshua Bell.