Kaynak Özel Dosya Sistemi tarafından desteklenen tarayıcıda SQLite Wasm

Tüm depolama alanı ihtiyaçlarınızı web'de etkili bir şekilde karşılamak için SQLite kullanın.

SQLite hakkında

SQLite popüler bir açık kaynak, basit, yerleştirilmiş ilişkisel sistemidir. Birçok geliştirici, verilerini bir şekilde özelleştirebilirsiniz. Küçük boyutu ve düşük bellek nedeniyle bir veritabanı motoru olarak kullandığı için SQLite, masaüstü uygulamaları ve web tarayıcıları.

SQLite'ın en önemli özelliklerinden biri, sunucusuz bir veritabanı olmasıdır. çalışması için ayrı bir sunucu işlemi gerektirmemesidir. Bunun yerine veritabanı kullanıcının cihazında tek bir dosyada saklandığından entegre edebiliyoruz.

SQLite logosu.

Web Assembly tabanlı SQLite

Web Assembly'ye (Wasm) dayalı olarak resmi olmayan birkaç SQLite sürümü vardır. ve web tarayıcılarında kullanılmasına izin verir. Örneğin, sql.js'dir. İlgili içeriği oluşturmak için kullanılan sqlite3 WASM/JS alt projesi ilk adımı olarak eşsiz özelliklerinden Wasm kitaplığın Wasm derlemelerini yapan SQLite projesi desteklenen SQLite teslimatlarından oluşan ailenin yerleşik üyelerinden oluşuyor. Beton şu hedefleri sayabiliriz:

  • C API'ye olabildiğince yakın bir alt düzey sqlite3 API bağlamak şartları kabul etmiş olursunuz.
  • Şuna daha yakın, üst düzey nesne odaklı API: sql.js ve Node.js stili uygulamalara alt düzey API ile iletişim kurar. Bu API, iş parçacığının alt düzey API'sidir.
  • Önceki API'lere Çalışan mesajları aracılığıyla iletişim kuran Çalışan tabanlı bir API. Bu Biri, alt düzey API'lerle ana iş parçacığında kullanılmak üzere tasarlanmıştır. ve bunlarla çalışan mesajları aracılığıyla iletişim kurulmasını sağlar.
  • Worker API'nin söz konusu API'yi tamamen gizleyen Promise tabanlı bir varyantı. ileti dizileri arası iletişim kurmanın yanı sıra
  • Mevcut JavaScript API'lerini kullanarak kalıcı istemci tarafı depolama desteği, Buna Kaynak Gizli Dosya Sistemi (OPFS) dahildir.

Kaynak Özel Dosya Sistemi kalıcı arka ucuyla SQLite Wasm'ı kullanma

npm'den kitaplığı yükleme

Şunu yükleyin: @sqlite.org/sqlite-wasm npm'den paketi aşağıdaki komutu kullanarak:

npm install @sqlite.org/sqlite-wasm

Kaynak Gizli Dosya Sistemi

Kaynak Gizli Dosya Sistemi (OPFS, File System Access API) ise Bu çözüm, verilere son derece etkili erişim sağlayan özel bir yüzeydir. Bu yeni platform yerleşik ve özel yazma erişimi sunarak mevcut olanlardan farklıdır. dosyanın içeriği hakkında daha fazla bilgi edinin. Bu değişim ve düzenli olarak okuma kabiliyeti değiştirilmemiş değişiklikler ve eşzamanlı bir varyantın kullanılabilirliği performansı önemli ölçüde artırır ve yeni kullanım alanları ortaya çıkarır durumlarda işe yarar.

Tahmin edebileceğiniz gibi, proje hedeflerinin son noktası olan ekibinize destek sunmak, mevcut JavaScript API'lerini kullanan kalıcı istemci tarafı depolama verilerin veritabanı dosyasında saklanmasıyla ilgili katı performans gereksinimleri. Kaynak Özel Dosya Sistemi ve özellikle createSyncAccessHandle() yöntemi FileSystemFileHandle devreye girer. Bu yöntem, FileSystemSyncAccessHandle Eşzamanlı olarak bir dosyaya okuma ve yazma işlemi yapmak için kullanılabilecek nesne. İlgili içeriği oluşturmak için kullanılan eşzamanlı yapısı performans avantajları sağlar, ancak diğer yalnızca özelleştirilebilir Web Çalışanları'nın kaynak Özel Dosya Sistemi'ndeki dosyaları kullanır.

Gerekli başlıkları ayarlama

İndirilen SQLite Wasm arşivi, diğer dosyaların yanı sıra sqlite3.js içerir. ve sqlite3.wasm dosyaları sqlite3 WASM/JS derlemesini oluşturur. jswasm dizin, temel sqlite3 teslimatlarını ve üst düzey dizini içerir. demo ve test uygulamaları içerir. Tarayıcılar Wasm dosyalarını file:// URL'leri içerir. Bu nedenle, bununla oluşturduğunuz tüm uygulamalar bir web sunucusu sunucu, dosyalar:

Bu başlıkların nedeni SQLite Wasm'ın SharedArrayBuffer Bu başlıkları ayarlamak, güvenlik şartlarına uymalısınız.

Geliştirici Araçları'nı kullanarak trafiği incelerseniz bilgi:

Yukarıda bahsedilen iki başlık, Chrome Geliştirici Araçları'nda vurgulanmış Cross-Origin-Embedder-Policy ve Cross-Origin-Opener-Policy.

Hız testi

SQLite ekibi, WebAssembly uygulamaları için bazı karşılaştırmalar yaptı. web SQL'e kıyasla 3 kat daha fazla. Bu karşılaştırmalar SQLite Wasm'in genellikle Web SQL hızı kadar hızda ilerler. Bazen biraz daha yavaş, bazen de biraz daha hızlıdır. Tüm ayrıntıları öğrenmek için sonuçlar sayfasına gidin.

Başlangıç kod örneği

Daha önce belirtildiği gibi, Kaynak Özel Dosya Sistemi ile SQLite Wasm kalıcı arka ucun çalışan bağlamından çalıştırılması gerekir. Neyse ki kitaplık, tüm bunları sizin için otomatik olarak gerçekleştirir. doğrudan ana ileti dizisinden.

import { sqlite3Worker1Promiser } from '@sqlite.org/sqlite-wasm';

(async () => {
  try {
    console.log('Loading and initializing SQLite3 module...');

    const promiser = await new Promise((resolve) => {
      const _promiser = sqlite3Worker1Promiser({
        onready: () => {
          resolve(_promiser);
        },
      });
    });

    console.log('Done initializing. Running demo...');

    let response;

    response = await promiser('config-get', {});
    console.log('Running SQLite3 version', response.result.version.libVersion);

    response = await promiser('open', {
      filename: 'file:worker-promiser.sqlite3?vfs=opfs',
    });
    const { dbId } = response;
    console.log(
      'OPFS is available, created persisted database at',
      response.result.filename.replace(/^file:(.*?)\?vfs=opfs$/, '$1'),
    );

    await promiser('exec', { dbId, sql: 'CREATE TABLE IF NOT EXISTS t(a,b)' });
    console.log('Creating a table...');

    console.log('Insert some data using exec()...');
    for (let i = 20; i <= 25; ++i) {
      await promiser('exec', {
        dbId,
        sql: 'INSERT INTO t(a,b) VALUES (?,?)',
        bind: [i, i * 2],
      });
    }

    console.log('Query data with exec()');
    await promiser('exec', {
      dbId,
      sql: 'SELECT a FROM t ORDER BY a LIMIT 3',
      callback: (result) => {
        if (!result.row) {
          return;
        }
        console.log(result.row);
      },
    });

    await promiser('close', { dbId });
  } catch (err) {
    if (!(err instanceof Error)) {
      err = new Error(err.result.message);
    }
    console.error(err.name, err.message);
  }
})();

Demo

Demoda yukarıdaki kodun işleyiş şeklini görebilirsiniz. Şu bölüme mutlaka göz atın: kaynak kod görebilirsiniz. Aşağıdaki yerleştirilmiş sürümün OPFS arka ucunu kullanmadığını unutmayın. Demoyu açtığınızda, ayrı bir sekmeye ekleyin.

Kaynak Gizli Dosya Sisteminde Hata Ayıklama

SQLite Wasm'ın Kaynak Özel Dosya Sistemi çıkışında hata ayıklamak için OPFS Gezgini Chrome uzantısı.

Chrome Web Mağazası&#39;ndaki OPFS Gezgini

Uzantıyı yükledikten sonra Chrome Geliştirici Araçları'nı açın, OPFS Gezgin sekmesine tıklayın. Böylece SQLite Wasm'in Kaynak Gizli Dosya Sistemi.

Demo uygulamanın kaynak Özel Dosya Sistemi yapısını gösteren OPFS Explorer Chrome uzantısı.

Geliştirici Araçları'ndaki OPFS Gezgini penceresindeki herhangi bir dosyayı tıkladığınızda dosyayı yerel diske kaydedebilir. Ardından şöyle bir uygulama kullanabilirsiniz: Veritabanını incelemek için SQLite Görüntüleyici'yi SQLite Wasm'ın aslında vadetildiği gibi çalıştığından emin olun.

SQLite Wasm demosinden bir veritabanı dosyası açmak için kullanılan SQLite Viewer uygulaması.

Yardım alma ve geri bildirim sağlama

SQLite Wasm, SQLite topluluğu tarafından geliştirilip yönetilmektedir. Yardım alın ve şurada arama yaparak ve yayınlayarak geri bildirim sağlamak destek forumunu ziyaret edin. Tam dokümanlarını SQLite sitesinde bulabilirsiniz.

Teşekkür

Tobias Fischer'ın hero resmi Lansmanı kaldırın.