Kullanıcının bilgisayarında verileri yapılandırılmış bir şekilde depolamanıza olanak tanıyan Web SQL Veritabanı API'si (dahili olarak SQLite veritabanı motorunu temel alır), Nisan 2009'da kullanıma sunuldu ve Kasım 2010'da kullanımdan kaldırıldı. Bu özellik WebKit'te (Safari'yi destekleyen) uygulanmış ve Blink motorunda (Chrome'u destekleyen) etkin kalmıştır. Ancak Gecko (Firefox'u destekleyen) bu özelliği hiçbir zaman uygulamamış ve WebKit, 2019'da bu özelliği kaldırmıştır.
World Wide Web Consortium (W3C), web veritabanına ihtiyaç duyan kullanıcıların Web Depolama API'yi, localStorage
ve sessionStorage
gibi teknolojileri ya da IndexedDB'i kullanmasını önerir.
Bu teknolojiler, anahtar/değer depoları ve yapılandırılmış veriler söz konusu olduğunda güçlü yönlerini gösterir ancak güçlü bir sorgu dilinin olmaması gibi zayıf yönleri de vardır. Kullanıcılar web'de SQL kullanmak istiyor.
Web SQL desteğinin sonlandırılması ve kaldırılması adımları
- [ Bitti.] Web SQL, Chromium 97'de ( 4 Ocak 2022) üçüncü taraf bağlamları için desteği sonlandırıldı ve kaldırıldı.
- [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 105 ( 4 Ocak 2022) sürümünden itibaren kullanımdan kaldırıldı. Bu tarihte Chrome DevTools Sorun panelinde bir uyarı mesajı gösterildi.
- [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 110 ( 4 Ocak 2022) sürümünden itibaren kullanılamamaktadır. Bu özelliği kullanmaya devam etmek için kurumsal politika, Chromium 110 ( 4 Ocak 2022) ile Chromium 123 ( 4 Ocak 2022) arasında kullanılabilir.
- [ Bitti.] Tüm bağlamlarda Web SQL erişimi, Chromium 115 ( 4 Ocak 2022) itibarıyla kullanımdan kaldırıldı ve Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösteriliyor.
- [destek sonu deneme sürümü sunulmuştur. Desteği sonlandırma denemeleri hakkında daha fazla bilgi edinmek için Kaynak denemelerini kullanmaya başlama başlıklı makaleyi inceleyin. Bitti.] Web SQL'i kullanmaya devam etmek için Chromium 117 ( 4 Ocak 2022) ile Chromium 123 ( 4 Ocak 2022) arasında
- [ Bitti.] Chromium 119'dan itibaren tüm bağlamlarda Web SQL erişimi artık kullanılamıyor.
Şimdi beni ne bekliyor?
Giriş bölümünde belirtildiği gibi, Web Depolama API'si teknolojileri (ör. localStorage
ve sessionStorage
) veya IndexedDB standardı, birçok durumda iyi alternatifler olsa da her durumda iyi bir alternatif değildir.
Depolama alanını web geliştiricilerine bırakmanın nedeni
Wasm'in gelişiyle birlikte SQL veya NoSQL çözümleri web'e gelebilir. Örneğin, DuckDB-Wasm ve absurd-sql. Bu çalışmalara dayanarak, geliştirici topluluğunun tarayıcı tedarikçilerinden daha hızlı ve daha iyi şekilde yeni depolama çözümleri oluşturabileceğini düşünüyoruz.
Web SQL'i kaldırmanın yanı sıra başka adımlar da atacağız. Aslında, açık kaynak topluluğu tarafından yönetilecek ve doğrudan tarayıcılara düzeltme ve yeni özellikler ekleme yükünü ortadan kaldıracak, dilediğiniz zaman güncellenebilen bir paket olarak sunulan bir şeyle değiştirdik. Amacımız, geliştiricilerin kendi veritabanlarını web'e getirmelerine olanak tanımaktır.
Ayrıca bu örneğin, açık kaynak veritabanı ekosisteminin gelişmesine yardımcı olacağını umuyoruz. Dosya sistemi erişim tutamaçlarının kullanıma sunulması, özel depolama alanı çözümlerinin oluşturulabileceği yeni bir temel yapı sağladı.
Web SQL desteğinin sonlandırılmasının nedenleri
Sürdürülebilirlik ve güvenlikle ilgili endişeler
Web SQL spesifikasyonu sürdürülebilir bir şekilde uygulanamadığından yenilikleri ve yeni özellikleri sınırlandırıyor. Standartın son sürümünde "Kullanıcı aracıları, Sqlite 3.6.19 tarafından desteklenen SQL lehçesini uygulamalıdır" ifadesi yer almaktadır.
SQLite başlangıçta kötü amaçlı SQL ifadeleri çalıştırmak için tasarlanmamıştı 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üzeltmelerini takip etme ihtiyacı, Chromium'da SQLite'in güncellenmesini zorunlu kılıyor. Bu durum, Web SQL'in tam olarak SQLite 3.6.19 gibi davranma şartıyla doğrudan çelişir.
API şekli
Web SQL de yaşını gösteren bir API'dir. 2000'lerin sonlarına ait bir teknoloji olan bu yöntem, aşağıdaki kod örneğinde (Nolan Lawson'un izniyle) gösterildiği gibi "geri çağırma cehennemi"nin mükemmel bir örneğidir. Gördüğünüz gibi, SQL ifadeleri (SQLite SQL lehçesi kullanılarak) veritabanı yöntemlerine dize olarak iletilir.
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 aşağıdaki sonucu elde edersiniz:
Uygulayıcı desteğinin olmaması
API'nin anlaşılması zor biçimi (en azından günümüz açısından) dışında Mozilla, Web SQL'in SQLite üzerine inşa edilmesiyle ilgili birçok endişe taşıdı:
"[SQLite]'in, genel web içeriğine açık bir API için doğru temel olduğunu düşünmüyoruz. Bunun en önemli nedeni, SQL'i yararlı bir şekilde alt kümelerine ayıran güvenilir ve yaygın olarak kabul gören bir standart olmamasıdır. Ayrıca, SQLite'teki değişikliklerin web'i daha sonra etkilemesini istemiyoruz ve SQLite'te büyük tarayıcı sürümlerinden (ve bir web standardından) yararlanmanın akıllıca olduğunu düşünmüyoruz."
Mozilla'nın endişeleri hakkında daha fazla bilgiyi eski Mozilla çalışanı Vladimir Vukićević'in blog yayınında bulabilirsiniz. Daha fazla bilgi için W3C Web Uygulamaları Çalışma Grubu tutanakları'na (ve ayrıntılara gerçekten dalmak istiyorsanız IRC günlüklerine) ve posta listesi arşivlerine göz atın. Ayrıca, Nolan Lawson'un blog yayını da yaşananlara genel bir bakış sunar.
Geri bildirim
Bu yayında açıklanan desteği sonlandırma adımları hakkında herhangi bir endişeniz varsa blink-dev posta listesinde bize bildirin. Bu grup herkese açıktır ve herkes içerik yayınlayabilir.
İlgili bağlantılar
- ChromeStatus girişi: Üçüncü taraf bağlamlarında WebSQL desteğinin sonlandırılması ve kaldırılması
- ChromeStatus girişi: Güvenli olmayan bağlamlarda WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Desteği sonlandırma ve kaldırma amacı: Üçüncü taraf bağlamında WebSQL
- Desteği sonlandırma ve kaldırma amacı: Güvenli olmayan bağlamlarda WebSQL
- Chromium sorunu: Üçüncü taraf bağlamlarında WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Chromium sorunu: Güvenli olmayan bağlamlarda WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Chromium sorunu: WebSQL desteğini sonlandırma ve WebSQL'i kaldırma (Window#openDatabase)
- Tarayıcıda Origin Private File System tarafından desteklenen SQLite Wasm
Teşekkür ederiz
Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelenmiştir.