Web SQL'in kullanımdan kaldırılması ve kaldırılması

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.

Güvenli olmayan bağlamlarda Web SQL okuyan bir uyarı içeren Chrome Geliştirici Araçları Sorunları paneli kullanımdan kaldırıldı.

  • [ 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ğlamlardaChromium 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.
  • [ Buradayız.] Web SQL'i kullanmaya devam edebilmek için 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.

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:

Chrome Geliştirici Araçları'ndaki Web SQL bölümü incelendiğinde, ruh hali (metin) ve önem derecesi (tamsayı) sütunlarıyla yağmur fırtınası adı verilen ve bir tanesi kasvetli, önem derecesi altı olan bir veritabanıyla mydatabase adlı veritabanı gösterilir.

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.

Teşekkür

Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelendi.