Isu Keserasian Pelayar Ganggu Teknik SQLite Inovatif di GitHub Pages

Pasukan Komuniti BigGo
Isu Keserasian Pelayar Ganggu Teknik SQLite Inovatif di GitHub Pages

Satu teknik pintar untuk menghoskan pangkalan data SQLite di platform statik seperti GitHub Pages menghadapi halangan besar: masalah keserasian pelayar yang menghalang ramai pengguna daripada mengalami pendekatan inovatif untuk laman web statik berasaskan pangkalan data.

Kaedah ini, yang asalnya ditunjukkan pada tahun 2021, menyusun SQLite kepada WebAssembly dan melaksanakan sistem fail maya yang mengambil cebisan pangkalan data melalui permintaan HTTP Range. Ini membolehkan pertanyaan set data besar (sehingga 670MB dalam demo asal) sambil hanya memuat turun data khusus yang diperlukan untuk setiap pertanyaan. Pendekatan ini menjanjikan penghapusan pelayan backend untuk laman statik yang padat data, tetapi perbincangan komuniti baru-baru ini mendedahkan isu fungsi yang meluas.

Pendekatan Teknikal Asal:

  • SQLite dikompil kepada WebAssembly melalui Emscripten
  • Sistem fail maya menggunakan permintaan HTTP Range
  • Saiz halaman 1 KiB untuk pembahagian bahagian yang optimum
  • Sistem pra-pengambilan dengan saiz permintaan eksponen
  • Operasi pangkalan data baca sahaja pada hos statik

Pepijat Permintaan Range Firefox

Berbilang pengguna melaporkan menghadapi ralat rangkaian ketika cuba menjalankan demo SQLite, dengan pengguna Firefox terutamanya terjejas. Isu teras berpunca daripada cara Firefox mengendalikan permintaan HTTP Range untuk kandungan termampat.

Ia akan menjadi lebih menarik jika setiap contoh, sekurang-kurangnya untuk saya, tidak mengembalikan [ralat: Ralat Rangkaian: Ralat rangkaian telah berlaku.]

Masalah ini melibatkan tafsiran samar spesifikasi HTTP mengenai pengekodan kandungan. Firefox menambahkan 'identity' kepada senarai pengekodan yang disokong dalam Accept-Headers, manakala pelayar lain menggantikan senarai dengan 'identity'. Apabila GitHub Pages menerima permintaan julat dari Firefox, ia mungkin mengembalikan kepingan fail termampat yang menjadi tidak boleh dibaca oleh enjin SQLite. Kemerosotan ini tidak selalu wujud - beberapa pengguna menyatakan demo berfungsi dengan betul dalam versi Firefox sebelumnya.

Isu Keserasian Pelayar Utama:

  • Firefox: Bug permintaan HTTP Range dengan kandungan termampat (Bug 1874840)
  • Safari: Kegagalan tidak konsisten dilaporkan oleh sesetengah pengguna
  • Chrome/Chromium: Secara amnya berfungsi dengan betul
  • Edge: Secara amnya berfungsi dengan betul

Kebimbangan Kebolehpercayaan Rentas Pelayar

Isu keserasian melampaui Firefox. Sesetengah pengguna Safari juga melaporkan kegagalan, walaupun masalah itu kelihatan kurang konsisten merentasi pelayar Apple. Cabaran asas terletak pada bagaimana pelayar berbeza mentafsir spesifikasi permintaan julat HTTP dan bagaimana pembekal hos statik mengendalikan permintaan ini. GitHub Pages, walaupun cemerlang untuk kandungan statik standard, mungkin tidak mengendalikan gabungan khusus permintaan julat dan mampatan yang diperlukan oleh sistem fail maya HTTP SQLite secara optimum.

Pendekatan Alternatif Muncul

Walaupun menghadapi cabaran keserasian ini, konsep asal telah mengilhamkan beberapa alternatif yang menjanjikan. DuckDB WASM telah mendapat sambutan sebagai pengganti moden, menawarkan fungsi serupa dengan sokongan pelayar yang berpotensi lebih baik. Seorang pembangun berkongsi pengalaman mereka menggunakan DuckDB WASM di GitHub Pages untuk memaparkan trend perniagaan, walaupun mereka menyatakan masa muat awal sekitar 10 saat untuk set data yang besar.

Pasukan SQLite rasmi sejak itu telah menambah sokongan WebAssembly kepada pengedaran mereka, menyebut projek komuniti terdahulu sebagai inspirasi. Pendekatan lain menggunakan IndexedDB sebagai sandaran penyimpanan berterusan, merawat pangkalan data tempatan pelayar sebagai blok cakera maya untuk operasi SQLite. Perkembangan ini mencadangkan idea teras tetap bernilai, walaupun pelaksanaan asal menghadapi halangan keserasian pelayar.

Teknologi Alternatif:

  • DuckDB WASM: Pengganti moden dengan sokongan pelayar yang lebih baik
  • Official SQLite WASM: Kini termasuk sokongan WebAssembly
  • absurd-sql: Menggunakan IndexedDB sebagai backend penyimpanan
  • sqlite-wasm-http: Pengedaran rasmi SQLite dengan sokongan HTTP

Batasan Praktikal dan Penyelesaian

Untuk pembangun yang mempertimbangkan pendekatan ini, isu keserasian pelayar membentangkan halangan sebenar. Teknik ini memerlukan ujian teliti merentasi pelbagai pelayar dan mungkin memerlukan mekanisme sandaran untuk pengguna yang terjejas. Sesetengah pelaksanaan terpaksa memuatkan keseluruhan fail apabila permintaan julat gagal, walaupun ini menafikan tujuan untuk set data besar. Konsensus komuniti mencadangkan bahawa walaupun elegan secara teori, pelaksanaan praktikal memerlukan lebih keteguhan untuk penggunaan pengeluaran.

Pembangunan berterusan dalam ruang ini menunjukkan minat berterusan dalam menolak batasan hos statik. Apabila piawaian web berkembang dan tingkah laku pelayar menjadi lebih konsisten, teknik ini mungkin akhirnya mencapai kebolehpercayaan yang diperlukan untuk penerimaan meluas. Buat masa ini, pembangun mesti menimbang potensi inovatif berbanding kebimbangan keserasian sebenar yang telah diketengahkan oleh maklum balas komuniti.

Rujukan: Hosting SQLite databases on Github Pages