การเลิกใช้และการนำ Web SQL ออก

API ฐานข้อมูล SQLite ในเว็บซึ่งช่วยให้คุณจัดเก็บข้อมูลอย่างมีโครงสร้างในคอมพิวเตอร์ของผู้ใช้ (ภายในจากเครื่องมือฐานข้อมูล SQLite) เปิดตัวเมื่อเดือนเมษายน 2009 และเลิกใช้แล้วในเดือนพฤศจิกายน 2010 ในระหว่างที่ใช้งานใน WebKit (ซึ่งขับเคลื่อน Safari) และยังคงทำงานอยู่ในเครื่องมือ Blink (ซึ่งเป็นตัวขับเคลื่อน Chrome) Gecko (ซึ่งขับเคลื่อน Firefox) ก็ไม่เคยใช้ฟีเจอร์นี้และ WebKit นำออกไปในปี 2019

World Wide Web Consortium (W3C) ส่งเสริม ให้ผู้ที่ต้องการฐานข้อมูลเว็บนำเทคโนโลยี Web Storage API มาใช้ เช่น localStorage และ sessionStorage หรือ IndexedDB เทคโนโลยีเหล่านี้แสดงจุดแข็งของที่จัดเก็บคีย์/ค่าและข้อมูลที่มีโครงสร้าง แต่เป็นที่ทราบกันดีว่ามีจุดอ่อน เช่น ไม่มีภาษาในการค้นหาที่ชัดเจน ผู้คนต้องการ SQL บนเว็บด้วยเหตุผลบางอย่าง

ขั้นตอนการเลิกใช้งานและการนำ Web SQL ออก

  • [ เสร็จสิ้น] เราเลิกใช้งาน SQL ในเว็บและนำบริบทของบุคคลที่สามใน Chromium 97 ออกแล้ว ( 4 มกราคม 2022)
  • [ เสร็จสิ้น] เราเลิกใช้งานการเข้าถึง SQL ในเว็บในบริบทที่ไม่ปลอดภัยแล้วเมื่อวันที่ Chromium 105 ( 4 มกราคม 2022) ซึ่งเป็นเวลาที่มีการแสดงข้อความเตือนในแผงปัญหาเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

แผงปัญหาเกี่ยวกับเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ที่มีคำเตือนว่า Web SQL ในบริบทที่ไม่ปลอดภัยเลิกใช้งานแล้ว

  • [ เสร็จสิ้น] การเข้าถึง SQL ในเว็บในบริบทที่ไม่ปลอดภัยจะใช้งานไม่ได้อีกต่อไปตั้งแต่ Chromium 110 ( 4 มกราคม 2022) นโยบายองค์กรเพื่อให้ใช้ฟีเจอร์นี้ต่อไปได้ตั้งแต่วันที่ Chromium 110 ( 4 มกราคม 2022) ถึง Chromium 123 ( 4 มกราคม 2022)
  • [ เสร็จสิ้น] เราจะเลิกใช้งานการเข้าถึง SQL ในเว็บในบริบททั้งหมดตั้งแต่วันที่ Chromium 115 ( 4 มกราคม 2022) และจะแสดงข้อความเตือนในแผงปัญหาเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
  • [ เราอยู่ตรงนี้] การทดลองใช้การเลิกใช้งานเพื่อการใช้งาน Web SQL ต่อไปจะพร้อมใช้งานจาก Chromium 117 ( 4 มกราคม 2022) ถึง Chromium 123 ( 4 มกราคม 2022) ดูข้อมูลเพิ่มเติมเกี่ยวกับช่วงทดลองใช้ฟีเจอร์ที่เลิกใช้งานได้ที่เริ่มต้นใช้งานช่วงทดลองใช้จากต้นทาง

ขั้นตอนถัดไป

อย่างที่ได้บอกไปในการเปิดตัวเทคโนโลยี Web Storage API อย่าง localStorage และ sessionStorage หรือมาตรฐาน IndexedDB เป็นทางเลือกที่ดีในหลายๆ กรณี

เหตุผลที่มอบพื้นที่เก็บข้อมูลให้กับนักพัฒนาเว็บ

เมื่อนำโซลูชัน Wasm มาใช้ โซลูชัน SQL หรือ NoSQL ก็จะปรากฏในเว็บได้ ตัวอย่างหนึ่งคือ DuckDB-Wasm และอีกตัวอย่างหนึ่งคือ absurd-sql จากผลงานสร้างสรรค์เหล่านี้ เราคิดว่าชุมชนนักพัฒนาซอฟต์แวร์สามารถทำซ้ำและสร้างโซลูชันพื้นที่เก็บข้อมูลใหม่ได้อย่างรวดเร็วและดีกว่าผู้ให้บริการเบราว์เซอร์

เราไม่ได้วางแผนที่จะนำเพียง SQL ของเว็บออก อันที่จริงเราแทนที่โค้ดนี้ด้วยบางอย่างที่จะดูแลโดยชุมชนโอเพนซอร์ส โดยทำหน้าที่เป็นแพ็กเกจที่สามารถอัปเดตได้ตามความเหมาะสม โดยไม่ต้องเสียค่าใช้จ่ายในการแนะนำการแก้ไขและฟีเจอร์ใหม่ๆ ในเบราว์เซอร์โดยตรง วัตถุประสงค์ของเราคือการให้นักพัฒนาซอฟต์แวร์ นำฐานข้อมูลของตัวเองไปไว้บนเว็บ

ยิ่งไปกว่านั้น เราหวังว่าตัวอย่างนี้จะช่วยให้ระบบนิเวศใหม่ของ ฐานข้อมูลโอเพนซอร์สเติบโตต่อไป! การเปิดตัวแฮนเดิลการเข้าถึงระบบไฟล์ในท้ายที่สุดจะเป็นตัวพื้นฐานใหม่สำหรับการสร้างโซลูชันพื้นที่เก็บข้อมูลที่กำหนดเองได้

เหตุผลในการเลิกใช้งาน SQL ของเว็บ

ข้อกังวลเกี่ยวกับความยั่งยืนและความปลอดภัย

ข้อกำหนด SQL ของเว็บไม่สามารถนำไปใช้อย่างยั่งยืนได้ ซึ่งจะจำกัดนวัตกรรมและฟีเจอร์ใหม่ๆ สถานะมาตรฐานตามตัวอักษรเวอร์ชันล่าสุด "User Agent ต้องใช้ภาษา SQL ที่ Sqlite 3.6.19 รองรับ

SQLite ไม่ได้ออกแบบมาเพื่อเรียกใช้คำสั่ง SQL ที่เป็นอันตราย แต่การใช้ Web SQL ทำให้เบราว์เซอร์ต้องดำเนินการบางอย่าง การตามให้ทันการแก้ไขด้านความปลอดภัยและความเสถียรทำให้ต้องอัปเดต SQLite ใน Chromium ซึ่งเกิดข้อขัดแย้งโดยตรงกับข้อกำหนดของ Web SQL ที่จะทำงานเหมือนกับ SQLite 3.6.19

รูปร่าง API

นอกจากนี้ SQL ในเว็บยังเป็น API ที่แสดงอายุด้วย จากตอนเป็นเด็กช่วงปลายยุค 2000 นี่ถือเป็นตัวอย่างที่ดีมากของ "นรกเรียกกลับ" ดังที่เห็นได้เป็นตัวอย่างโค้ดต่อไปนี้ (เอื้อเฟื้อจาก Nolan Lawson) จะเห็นได้ว่ามีการส่งคำสั่ง SQL (โดยใช้ภาษา SQL SQLite) เป็นสตริงไปยังเมธอดฐานข้อมูล

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 นี่คือผลลัพธ์

การตรวจสอบส่วน Web SQL ใน Chrome DevTools จะแสดงฐานข้อมูลที่เรียกว่า mydatabase พร้อมตารางชื่อพายุฝนที่มีอารมณ์ของคอลัมน์ (ข้อความ) และความรุนแรง (จำนวนเต็ม) ที่มี 1 รายการที่มีอารมณ์หม่นหมองและความรุนแรง 6 ระดับ

ไม่มีการสนับสนุนผู้ติดตั้ง

นอกเหนือจากรูปร่าง arcane API (อย่างน้อยก็ในมุมมองของวันนี้) แล้ว Mozilla ยังมีข้อกังวลมากมายเกี่ยวกับ Web SQL ที่สร้างขึ้นด้วย SQLite ดังนี้

"เราไม่คิดว่า [SQLite] จะเป็นพื้นฐานที่ถูกต้องสำหรับ API ที่แสดงเนื้อหาเว็บทั่วไปและโดยส่วนใหญ่ เนื่องจากไม่มีมาตรฐานที่น่าเชื่อถือและเป็นที่ยอมรับในวงกว้างสำหรับชุดย่อย SQL ที่เป็นประโยชน์ นอกจากนี้ เราไม่ต้องการให้การเปลี่ยนแปลง SQLite มีผลต่อเว็บในภายหลัง และไม่คิดว่าการใช้ประโยชน์จากเบราว์เซอร์รุ่นหลักๆ (และมาตรฐานเว็บ) กับ SQLite เป็นเรื่องรอบคอบ"

คุณสามารถอ่านข้อกังวลของ Mozilla ได้ในบล็อกโพสต์ของ Mozilla Vladimir Vukiการกำหนดeviการกำหนด เดิม สำหรับประวัติเพิ่มเติม โปรดดูนาทีของคณะทำงานเว็บแอปพลิเคชัน W3C (และหากต้องการลงรายละเอียดจริงๆ โปรดอ่านบันทึกของ IRC) และที่เก็บรายชื่ออีเมล) นอกจากนี้ บล็อกโพสต์ของ Nolan Lawson ยังแสดงให้เห็นภาพรวมที่ดีของสิ่งที่เกิดขึ้น

ความคิดเห็น

หากมีข้อกังวลเกี่ยวกับขั้นตอนการเลิกใช้งานที่แจ้งไว้ในโพสต์นี้ โปรดแจ้งให้เราทราบในรายชื่ออีเมลของ Blink-dev การเป็นสมาชิกในกลุ่มนี้เปิดให้ทุกคนเข้าร่วมได้ และทุกคนสามารถโพสต์ได้

ข้อความแสดงการยอมรับ

บทความนี้ได้รับการตรวจสอบโดย Joe Medley และ Ben Morss และ Joshua Bell