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
- [ เสร็จสิ้น] ไม่มีการเข้าถึง 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 นี่คือผลลัพธ์
ขาดการสนับสนุนจากผู้ติดตั้งใช้งาน
นอกเหนือจากรูปร่าง API (อย่างน้อยก็จากมุมมองของวันนี้) Mozilla มีหลายคน ความกังวล เกี่ยวกับ Web SQL ที่สร้างขึ้นจาก SQLite
"เราคิดว่า [SQLite] เป็นพื้นฐานที่ถูกต้องสำหรับ API ที่มีการใช้ในเว็บทั่วไป เนื้อหาที่สำคัญ ไม่ใช่เนื้อหาส่วนใหญ่ เพราะไม่มีเนื้อหาที่น่าเชื่อถือ ได้รับการยอมรับในวงกว้าง มาตรฐานที่แบ่งย่อย SQL อย่างเป็นประโยชน์ นอกจากนี้ เราไม่ต้องการเปลี่ยนแปลง กับ SQLite เพื่อให้มีผลต่อเว็บในภายหลัง และไม่ควรใช้ประโยชน์จากเบราว์เซอร์หลัก การเผยแพร่ (และมาตรฐานเว็บ) ไปยัง SQLite เป็นเรื่องอย่างระมัดระวัง"
คุณสามารถอ่านเกี่ยวกับข้อกังวลของ Mozilla ได้ใน บล็อกโพสต์ของ Mozillan Vladimir Vukićević ดูประวัติเพิ่มเติมได้ที่ นาทีของทีมการทำงานเว็บแอปพลิเคชัน W3C (และหากต้องการลงรายละเอียด ให้อ่าน บันทึก IRC) และ ที่เก็บรายชื่ออีเมล) นอกจากนี้ บล็อกโพสต์ของ Nolan Lawson จะให้ภาพรวมที่ดีของสิ่งที่เกิดขึ้น
ความคิดเห็น
หากคุณมีข้อกังวลใดๆ เกี่ยวกับขั้นตอนการเลิกใช้งานตามที่แจ้งไว้ในนี้ โปรดแจ้งให้เราทราบใน blink-dev mail list สมาชิกในกลุ่มนี้เปิดสำหรับทุกคน และทุกคนสามารถโพสต์ได้
ลิงก์ที่เกี่ยวข้อง
- รายการ ChromeStatus มีดังนี้ เลิกใช้งานและนำ WebSQL ออกในบริบทของบุคคลที่สาม
- รายการ ChromeStatus มีดังนี้ เลิกใช้งานและนำ WebSQL ออกในบริบทที่ไม่ปลอดภัย
- เจตนาที่จะเลิกใช้งานและนำออก: WebSQL ในบริบทของบุคคลที่สาม
- เจตนาที่จะเลิกใช้งานและนำออก: WebSQL ในบริบทที่ไม่ปลอดภัย
- ปัญหาเกี่ยวกับ Chromium เลิกใช้งานและนำ WebSQL ออกในบริบทของบุคคลที่สาม
- ปัญหาเกี่ยวกับ Chromium เลิกใช้งานและนำ WebSQL ออกในบริบทที่ไม่ปลอดภัย
- ปัญหาเกี่ยวกับ Chromium เลิกใช้งานและนำ WebSQL ออก (Window#openDatabase)
- SQLite Wasm ในเบราว์เซอร์ที่ได้รับการสนับสนุนโดยระบบไฟล์ส่วนตัวดั้งเดิม
กิตติกรรมประกาศ
บทความนี้ได้รับการตรวจสอบโดย Joe Medley และ Ben Morss และ Joshua Bell