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 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 çalıştıran) Blink motorunda etkin durumda olsa da, Firefox'u çalıştıran Gecko bu özelliği hiçbir zaman uygulamamıştır ve WebKit 2019'da bunu kaldırmıştır.

World Wide Web Consortium (W3C), web veritabanlarına ihtiyaç duyan localStorage, sessionStorage veya IndexedDB gibi Web Storage API teknolojilerine ihtiyaç duyanları teşvik eder. Bu teknolojilerin, anahtar/değer depoları ve yapılandırılmış veriler açısından güçlü yanlarını göstermenin yanı sıra güçlü bir sorgu dilinin olmaması gibi dezavantajlar da var. Kullanıcıların web'de SQL istemesinin bir nedeni var.

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

  • [ Tamamlandı.] Web SQL desteği sonlandırıldı ve Chromium 97'de üçüncü taraf bağlamları nedeniyle kaldırıldı ( 4 Ocak 2022).
  • [ Tamamlandı.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 105 itibarıyla ( 4 Ocak 2022) itibarıyla Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösterilirken kullanımdan kaldırılmıştır.

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

  • [ Tamamlandı.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 110'dan itibaren kullanılamayacaktır (4 Ocak 2022). Özelliği kullanmaya devam etmek için kurumsal politika Chromium 110'dan ( 4 Ocak 2022) Chromium 123'e kadar (4 Ocak 2022) mevcuttur.
  • [ Tamamlandı.] Tüm bağlamlarda Web SQL erişimi, Chromium 115 itibarıyla ( 4 Ocak 2022) kullanımdan kaldırılmıştır ve Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösterilmektedir.
  • [ Tamamlandı.] Web SQL'i kullanmaya devam etmek için kullanımdan kaldırma denemesi, Chromium 117'den ( 4 Ocak 2022) Chromium 123'e ( 4 Ocak 2022'de) sunulmuştur. 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.
  • [ Tamamlandı.] Tüm bağlamlarda Web SQL erişimi artık Chromium 119'dan kullanılamayacaktır.

Sonraki adımlar

Girişte belirtildiği gibi, localStorage ve sessionStorage veya IndexedDB standartları birçok durumda iyi alternatiflerdir, ancak her durumda iyi birer alternatiftir.

Depolama alanını web geliştiricilere bırakma gerekçesi

Wasm'ın ortaya çıkmasıyla SQL veya NoSQL çözümleri web'e yayılabilir. Bunlardan biri DuckDB-Wasm, diğeri absurd-sql ise Bu çalışmalara dayanarak, geliştirici topluluğunun tarayıcı tedarikçilerine kıyasla yeni depolama çözümlerini daha hızlı ve daha iyi şekilde geliştirebileceğini ve oluşturabileceğini düşünüyoruz.

Yalnızca Web SQL'i kaldırmayı planlamıyoruz. Hatta bunun yerine, açık kaynak topluluğu tarafından korunan, düzeltmeleri ve yeni özellikleri doğrudan tarayıcılara ekleme zahmetine girmeden istenilen şekilde güncellenebilecek bir paket olarak sunulan bir şey ekledik. Amacımız, geliştiricilerin kendi veritabanlarını web'e taşımalarını sağlamaktır.

Dahası, bu örneğin yeni bir açık kaynak veritabanı ekosisteminin gelişmesine yardımcı olmasını umuyoruz. Dosya sistemi erişim herkese açık kullanıcı adlarının kullanıma sunulmasıyla birlikte, özel depolama çözümlerinin oluşturulabileceği yeni temel öğe sağlanmaktadır.

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 bir şekilde uygulanamaz. Bu da yenilikleri ve yeni özellikleri sınırlandırır. Standardın son sürümü şöyle "Kullanıcı aracıları Sqlite 3.6.19 tarafından desteklenen SQL diyalektini uygulamalıdır" anlamına gelir.

SQLite, başlangıçta kötü amaçlı SQL ifadelerini çalıştırmak üzere tasarlanmamıştır. Ancak Web SQL'i uygulamak, tarayıcıların da tam olarak bunu yapması gerektiği anlamına gelir. Güvenlik ve kararlılık düzeltmelerini takip etme ihtiyacı, Chromium'da SQLite'ın güncellenmesini zorunlu kılar. Bu, Web SQL'in tam olarak SQLite 3.6.19 ile aynı olması şartıyla doğrudan çelişir.

API şekli

Web SQL, ayrıca yaşını gösteren bir API'dir. 2000'lerin sonlarında bir çocuk olarak, aşağıdaki kod örneğinden (Nolan Lawson'ın izniyle) anlaşıldığı gibi, bu "cehenneme" mükemmel bir örnektir. Gördüğünüz gibi SQL ifadeleri (SQLite SQL diyalektini kullanarak), 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 (metinsel) ve önem derecesi (tam sayı) sütunlarının yer aldığı, veritabanım adlı bir veritabanı ve altı şiddet derecesi içeren bir giriş olduğu gösteriliyor.

Uygulama uzmanı desteğinin olmaması

Gizemli API şeklinin yanı sıra (en azından bugünün bakış açısından) Mozilla'nın, Web SQL'in SQLite üzerine inşa edilmesiyle ilgili birçok endişesi vardı:

"[SQLite]'ın genel web içeriğine maruz kalan bir API için doğru temel olmadığını düşünüyoruz. Çünkü SQL'i uygun bir şekilde alt kümelere ayıran güvenilir, geniş çapta kabul görmüş bir standart yoktur. Buna ek olarak, SQLite'ta yapılan değişikliklerin daha sonra web'i etkilemesini istemiyoruz. Büyük tarayıcı sürümlerini (ve bir web standardını) SQLite'a kullanmanın mantıklı bir işlem olduğunu düşünmüyoruz."

Eski Mozillan Vladimir Vukićević'in blog yayınında Mozilla'nın endişeleri hakkında bilgi edinebilirsiniz. Daha fazla geçmiş için W3C Web Uygulamaları Çalışma Grubu dakikalarına bakın (ayrıntıları incelemek istiyorsanız IRC günlüklerini ve posta listesi arşivlerini okuyun). Ayrıca Nolan Lawson'ın blog yayınında yaşananlar hakkında iyi bir genel bakış da sunuluyor.

Geri bildirim

Bu yayında açıklanan kullanımdan kaldırma adımlarıyla ilgili endişeleriniz varsa blink-dev posta listesinden bize bildirin. Bu gruptaki üyelik herkese açıktır ve herkesin mesaj göndermesine izin verilir.

Teşekkür

Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelenmiştir.