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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

รูปร่าง API

นอกจากนี้ SQL ในเว็บยังเป็น API ที่แสดงอายุด้วย จากการเป็นเด็ก ในช่วงปลายทศวรรษ 2000 ตัวอย่างที่ดีอย่าง "callbackนรก" เป็นตัวอย่างโค้ดต่อไปนี้ (ด้วยความเอื้อเฟื้อจาก Nolan Lawson) ที่แสดงให้เห็น ดังที่คุณเห็นคำสั่ง 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 นี่คือผลลัพธ์

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

ขาดการสนับสนุนจากผู้ติดตั้งใช้งาน

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

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

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

ความคิดเห็น

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

กิตติกรรมประกาศ

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