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.
- [ 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.
- [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. Kami di sini.]
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:
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.
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
- Tujuan untuk Tidak Menggunakannya dan Menghapus: WebSQL dalam konteks pihak ketiga
- Tujuan penghentian penggunaan dan penghapusan: 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)
- Wasm SQLite di browser yang didukung oleh Origin Private File System
Ucapan terima kasih
Artikel ini ditinjau oleh Joe Medley dan Ben Morss, serta Joshua Bell.