Verileri kullanıcının bilgisayarında yapılandırılmış bir şekilde depolamanıza (dahili olarak SQLite veritabanı altyapısına dayalı olarak) olanak tanıyan Web SQL Database API Nisan 2009'da kullanıma sunuldu ve Kasım 2010'da terk edildi. Safari'yi destekleyen WebKit'te uygulanmış ve Chrome'u destekleyen Blink motorunda etkin kalmış olsa da Gecko (Firefox'u destekler) bu özelliği hiç uygulamadı ve WebKit 2019'da bu özelliği kaldırdı.
World Wide Web Consortium (W3C), web veritabanlarına ihtiyaç duyan kişilerin localStorage
ve sessionStorage
veya IndexedDB gibi Web Storage API teknolojilerini benimsemelerini teşvik eder.
Bu teknolojilerin, anahtar/değer depoları ve yapılandırılmış veriler açısından güçlü yanları olduğu, ancak güçlü bir sorgu dilinin olmaması gibi zayıf noktaları da olduğu kabul edilmiştir. Kullanıcıların web'de SQL'i tercih etmesinin bir nedeni vardır.
Web SQL'in kullanımdan kaldırılması ve kaldırılmasıyla ilgili adımlar
- [ Bitti.] Web SQL, Chromium 97'de (4 Ocak 2022) kullanımdan kaldırılmış ve üçüncü taraf bağlamında kaldırılmıştır.
- [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi Chromium 105 ( 4 Ocak 2022) itibarıyla kullanımdan kaldırılmıştır ve bu tarihte Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösterilmiştir.
- [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi Chromium 110 (4 Ocak 2022) tarihinden itibaren kullanılamamaktadır. Özelliği kullanmaya devam edebilmek için Chromium 110'dan ( 4 Ocak 2022) Chromium 123'e ( 4 Ocak 2022) devam eden bir kurumsal politika mevcuttur.
- [ Bitti.] Web SQL erişimi tüm bağlamlarda, Chromium 115 itibarıyla kullanımdan kaldırılmıştır ( 4 Ocak 2022) ve Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösterilir.
- [kullanımdan kaldırma deneme sürümü, Chromium 117 ile Chromium 123 (4 Ocak 2022) tarihleri arasında sunulmaktadır. Desteği sonlandırılan denemeler hakkında daha fazla bilgi edinmek için Kaynak denemelerini kullanmaya başlama bölümüne bakın. Buradayız.] Web SQL'i kullanmaya devam edebilmek için
Sonraki adımlar
Giriş bölümünde de belirtildiği gibi localStorage
ve sessionStorage
gibi Web Storage API teknolojileri ya da IndexedDB standardı birçok durumda iyi alternatiflerdir ancak çoğu durumda bunların hepsi olmayabilir.
Depolama alanını web geliştiricilerine bırakma gerekçesi
Wasm'ın ortaya çıkmasıyla birlikte SQL veya NoSQL çözümleri web'e girilebilir. Bir örnek DuckDB-Wasm, diğeri absurd-sql'dir. Bu tasarımlara dayanarak, geliştirici topluluğunun iterasyon yaparak yeni depolama çözümlerini tarayıcı tedarikçilerinden daha hızlı ve iyi oluşturabileceğini düşünüyoruz.
Web SQL'i kaldırmayı planlamıyoruz. Aslında, bu öğeyi açık kaynak topluluğu tarafından korunacak ve istendiğinde güncellenebilen bir paket halinde sunulan, düzeltmeleri ve yeni özellikleri doğrudan tarayıcılara ekleme yükü olmadan sunulan bir şey ile değiştirdik. Amacımız, geliştiricilerin kendi veritabanlarını web'e taşımalarını sağlamaktır.
Ayrıca, bu örneğin yeni bir açık kaynak veritabanları ekosisteminin gelişmesine yardımcı olacağını umuyoruz. Dosya sistemi erişim tutma yerlerinin kullanıma sunulması, son olarak özel depolama çözümlerinin oluşturulabileceği yeni temel öğeleri sağlar.
Web SQL'in kullanımdan kaldırılma nedenleri
Sürdürülebilirlik ve güvenlikle ilgili endişeler
Web SQL spesifikasyonu sürdürülebilir şekilde uygulanamaz; bu da inovasyonu ve yeni özellikleri sınırlandırır. Standardın tam anlamıyla durumların son sürümü "Kullanıcı aracıları, Sqlite 3.6.19 tarafından desteklenen SQL diyalektini uygulamalıdır".
SQLite başlangıçta kötü amaçlı SQL ifadelerini çalıştıracak şekilde tasarlanmamıştır. Ancak Web SQL'i uygulamak, tarayıcıların tam olarak bunu yapması gerektiği anlamına gelir. Güvenlik ve kararlılık düzeltmelerine ayak uydurmak, Chromium'daki SQLite'ın güncellenmesini gerektirir. Bu durum, Web SQL'in tam olarak SQLite 3.6.19 gibi çalışma gerekliliğiyle doğrudan çelişir.
API şekli
Web SQL aynı zamanda yaşını gösteren bir API'dir. Aşağıdaki kod örneğinde (Nolan Lawson'ın izniyle) gösterildiği gibi, 2000'lerin sonlarında bir çocuk olmak,"geri çağırma cehennemi"nin harika bir örneğidir. Gördüğünüz gibi, SQLite SQL diyalektini kullanan SQL ifadeleri, veritabanı yöntemlerine dize olarak aktarılır.
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!');
},
);
},
);
Bu kodu çalıştırıp oluşturulan tabloyu Chrome Geliştirici Araçları ile incelerseniz sonuç şu şekilde olur:
Uygulayıcı desteğinin olmaması
Arcane API şeklinin (en azından bugünün perspektifinden) dışında, Mozilla'nın SQLite üzerine derlenmesiyle ilgili birçok endişesi vardı:
"[SQLite]'ın genel web içeriğine maruz kalan bir API için doğru temeli değil, Ayrıca, SQLite'ta yapılan değişikliklerin daha sonra web'i etkilemesini istemiyoruz ve büyük tarayıcı sürümlerinden (ve bir web standardından) SQLite için yararlanmanın sağduyulu olduğunu düşünmüyoruz."
Mozilla'nın endişelerini eski adıyla Mozillan Vladimir Vukićević'in blog yayınında okuyabilirsiniz. Biraz daha tarih için W3C Web Uygulamaları Çalışma Grubu dakikalarına (ve gerçekten ayrıntılara inmek istiyorsanız IRC günlüklerini) ve posta listesi arşivlerine göz atın. Ayrıca, Nolan Lawson'ın blog yayınında, olanlar hakkında iyi bir genel bakış sunulmaktadır.
Geri bildirim
Bu yayında açıklanan kullanımdan kaldırma adımlarıyla ilgili herhangi bir endişeniz varsa blink-dev posta listesinden bize bildirin. Bu gruba üyelik herkese açıktır ve herkes yayın gönderebilir.
İlgili bağlantılar
- ChromeStatus girişi: Üçüncü taraf bağlamında WebSQL'yi kullanımdan kaldırma ve kaldırma
- ChromeStatus girişi: Güvenli olmayan bağlamlarda WebSQL'yi kullanımdan kaldırma ve kaldırma
- Intent to Deprecate and Remove: Üçüncü taraf bağlamında WebSQL
- Intent to Deprecate and Remove: Güvenli olmayan bağlamlarda WebSQL
- Chromium sorunu: Üçüncü taraf bağlamında WebSQL'yi kullanımdan kaldırma ve kaldırma
- Chromium sorunu: Güvenli olmayan bağlamlarda WebSQL'yi kullanımdan kaldırma ve kaldırma
- Chromium sorunu: WebSQL'yi (Window#openDatabase) kullanımdan kaldırma ve kaldırma
- Kaynak Özel Dosya Sistemi tarafından desteklenen tarayıcıdaki SQLite Wasm
Teşekkür
Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelendi.