淘汰及移除網路 SQL

Web SQL Database API,可讓您 以結構化方式將資料儲存在使用者的電腦上 (根據 SQLite 資料庫引擎) 之前, 2009 年 4 月推出在 2010 年 11 月放棄。 原本是在 WebKit (支援 Safari) 中實作,且在 也就是讓 Google Chrome 採用 Blink Engine (Chrome 採用的系統)、Gecko (支援 Firefox) 從未執行 導入了這項功能 WebKit 已於 2019 年移除

全球資訊網協會 (W3C) 鼓勵 需要網路資料庫 網路儲存空間 API 例如 localStoragesessionStorage, 或 IndexedDB。 這些技術證明瞭這些技術在鍵/值商店及 但顯然有些弱點 相似的查詢語言。使用者之所以希望網路 SQL 是有原因的,

網路 SQL 淘汰與移除步驟

  • [ 完成。]Web SQL 已淘汰,並基於下列第三方環境移除: Chromium 97 ( 2022 年 1 月 4 日)。
  • [ 完成。]不安全內容中的 Web SQL 存取權已於 淘汰 Chromium 105 ( 2022 年 1 月 4 日),屆時系統會顯示警告訊息 就顯示在 Chrome 開發人員工具問題面板中

Chrome 開發人員工具「Problem」面板不支援在不安全環境中讀取 Web SQL 的警告訊息。

  • [ 完成。]不再於不安全的內容中存取 Web SQL 自 Chromium 110 推出 ( 2022 年 1 月 4 日)。一個 如要繼續使用這項功能,請參閱企業政策Chromium 110 ( 2022 年 1 月 4 日) 至 Chromium 123 ( 2022 年 1 月 4 日)。
  • [ 完成。]所有結構定義中的 Web SQL 存取權已於下列日期淘汰 Chromium 115 ( 2022 年 1 月 4 日),系統就會顯示警告訊息 。
  • [ 完成。]A 罩杯 淘汰試用計畫 仍能在 Chromium 117 中使用 Web SQL ( 2022 年 1 月 4 日) 至 Chromium 123 ( 2022 年 1 月 4 日)。 如要進一步瞭解淘汰試用期,請參閱 開始使用來源試用
  • [ 完成。]您無法再透過所有結構定義存取 Web SQL Chromium 119

下一步該做什麼?

剛才提過 網路儲存空間 API 例如 localStorage敬上 和 sessionStorage, 或 IndexedDB 標準在許多情況下是不錯的替代方式,但目前並非在所有情況中。

將儲存空間留給網頁程式開發人員的理由

隨著 Wasm 問世,SQL 或 NoSQL 解決方案得以在網路上曝光。一個範例 是 DuckDB-Wasm,另一個是 Aburd-sql。根據這些創作 因為開發人員社群可以反覆改進 解決方案的速度和品質都比瀏覽器廠商來得快。

我們不打算只移除 Web SQL,事實上,我們改用 將由開放原始碼社群負責維護的套件 不需要另外推出修正和新功能, 直接傳入瀏覽器我們的目標是讓開發人員 將資料提供給網路資料庫

更棒的是,我們希望這個範例能為 使開放原始碼資料庫蓬勃發展!發行的 檔案系統存取帳號 最後 提供全新的基本功能,可讓您 。

淘汰 Web SQL 的原因

永續發展與安全疑慮

Web SQL 規格無法永續導入,因此會受到限制 創新和新功能標準的最後一個版本 states 「使用者代理程式必須 實作 Sqlite 3.6.19 支援的 SQL 方言

SQLite 最初並不是 旨在執行惡意 SQL 陳述式,但實作 Web SQL 的意義 瀏覽器執行這項功能的方式需要跟上資安和 穩定性修正會影響 Chromium 中更新 SQLite 的情況。這與 不符合 Web SQL 的要求與 SQLite 3.6.19 完全相同的要求。

API 形狀

Web SQL 也是能顯示其存在時間的 API。2000 年代晚期的孩子 這就是「回呼式死獄」這個很好的例子列於 (由諾蘭勞森提供) 示範。如您所見,SQL 陳述式 (使用 SQLite SQL 方言) 會以字串的形式傳遞 並轉換為資料庫方法

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!');
      },
    );
  },
);
敬上

如果要執行這段程式碼 使用 Chrome 開發人員工具檢查建立的資料表。 結果如下:

在 Chrome 開發人員工具中檢查「Web SQL」部分時,系統會顯示名為「mydatabase」的資料庫,其中有一個名為「雨天」的表格,欄心情 (文字) 和「嚴重程度 (整數」) 顯示一個項目,且心情為「黃體」,嚴重性為六。

缺乏實作器支援

除了弧形 API 形狀 (至少從今天的觀點來看),Mozilla 有許多 疑慮 如何利用 SQLite 建構 Web SQL:

「我們認為 [SQLite] 是向一般網路公開 API 的正確基礎 不僅如此 將 SQL 子集進行分類我們也無不希望改變 以避免日後影響網路 這些版本 (以及網路標準) 遷移至 SQLite 都是謹慎做法。"

您可以前往 former Mozillan Vladimir Vukičeviique 的網誌文章。 如需更多記錄,請參閱 W3C 網頁應用程式工作團隊分鐘數 (如果您需要進一步瞭解細節,請閱讀 IRC 記錄) 和 郵寄清單封存)。 此外, Nolan Lawson 的網誌文章 能讓您更清楚瞭解狀況

意見回饋

如果對本文所述的淘汰步驟有任何疑慮 貼文,請透過 blink-dev 郵寄清單。 這個群組的成員資格開放給所有人,但任何使用者都可以留言。

特別銘謝

本文經過 Joe Medley 和 和 Ben Morss Joshua Bell