Web SQL Database API ซึ่งช่วยให้คุณเก็บข้อมูลในลักษณะที่มีโครงสร้างในคอมพิวเตอร์ของผู้ใช้ (ภายในจะอิงตามเครื่องมือฐานข้อมูล SQLite) ได้เปิดตัวในเดือนเมษายน 2009 และหยุดให้บริการในเดือนพฤศจิกายน 2010 แม้ว่าจะมีการใช้งานใน WebKit (ซึ่งเป็นขุมพลังของ Safari) และยังคงทำงานอยู่ในเครื่องมือกลไก Blink (ซึ่งเป็นขุมพลังของ Chrome) แต่ Gecko (ซึ่งเป็นขุมพลังของ Firefox) ไม่เคยใช้งานฟีเจอร์นี้ และ WebKit ได้นําฟีเจอร์นี้ออกในปี 2019
World Wide Web Consortium (W3C)
ขอแนะนำ
ผู้ที่ต้องการให้ฐานข้อมูลเว็บนำเทคโนโลยี
Web Storage API
อย่าง
localStorage
และ
sessionStorage
หรือ
IndexedDB ไปปรับใช้
เทคโนโลยีเหล่านี้แสดงจุดแข็งเมื่อพูดถึงที่เก็บคีย์/ค่าและ Structured Data แต่ก็มีข้ออ่อนแอด้วยเช่นกัน เช่น ไม่มีภาษาการค้นหาที่มีประสิทธิภาพ ผู้คนต้องการใช้ SQL บนเว็บด้วยเหตุผล
ขั้นตอนการเลิกใช้งานและนํา SQL ในเว็บออก
- [ เสร็จแล้ว] เราได้เลิกใช้งานและนํา WebSQL ออกจากบริบทของบุคคลที่สามใน Chromium 97 ( 4 มกราคม 2022)
- [ เสร็จแล้ว] เราเลิกใช้งานการเข้าถึง Web SQL ในบริบทที่ไม่ปลอดภัยแล้วใน Chromium 105 ( 4 มกราคม 2022) ซึ่งข้อความเตือนจะแสดงในแผงปัญหาของเครื่องมือสําหรับนักพัฒนาเว็บใน Chrome
- [ เสร็จแล้ว] การเข้าถึง Web SQL ในบริบทที่ไม่ปลอดภัยจะใช้งานไม่ได้อีกต่อไปใน Chromium 110 ( 4 มกราคม 2022) นโยบายองค์กรสำหรับใช้ฟีเจอร์นี้ต่อไปใช้ได้ใน Chromium 110 ( 4 มกราคม 2022) ถึง Chromium 123 ( 4 มกราคม 2022)
- [ เสร็จแล้ว] การเข้าถึง Web SQL ในบริบททั้งหมดเลิกใช้งานแล้วตั้งแต่ Chromium 115 ( 4 มกราคม 2022) และข้อความเตือนจะแสดงในแผงปัญหา Chrome DevTools
- [ช่วงทดลองการเลิกใช้งานเพื่อใช้ Web SQL ต่อไปมีให้บริการตั้งแต่ Chromium 117 ( 4 มกราคม 2022) ถึง Chromium 123 ( 4 มกราคม 2022) ดูข้อมูลเพิ่มเติมเกี่ยวกับการทดลองเลิกใช้งานได้ที่หัวข้อเริ่มต้นใช้งานการทดลองใช้แหล่งที่มา เสร็จแล้ว]
- [ เสร็จแล้ว] การเข้าถึง Web SQL ในบริบททั้งหมดจะใช้ไม่ได้อีกต่อไปตั้งแต่ Chromium 119
ขั้นตอนถัดไป
ตามที่กล่าวไปก่อนหน้านี้ เทคโนโลยี Web Storage API อย่าง localStorage
และ sessionStorage
หรือมาตรฐาน IndexedDB เป็นทางเลือกที่ดีในหลายๆ กรณี แต่ก็ไม่ใช่ทุกกรณีไป
เหตุผลที่ปล่อยให้นักพัฒนาเว็บจัดการพื้นที่เก็บข้อมูล
เมื่อมี Wasm โซลูชัน SQL หรือ NoSQL ก็จะเข้ามาอยู่ในเว็บได้ ตัวอย่างหนึ่งคือ DuckDB-Wasm อีกตัวอย่างหนึ่งคือ absurd-sql เราเชื่อว่าชุมชนนักพัฒนาแอปสามารถสร้างโซลูชันพื้นที่เก็บข้อมูลใหม่ได้เร็วและดีกว่าผู้ให้บริการเบราว์เซอร์
เราไม่ได้วางแผนที่จะนำ SQL ในเว็บออกเพียงอย่างเดียว ความจริงแล้ว เราแทนที่เครื่องมือดังกล่าวด้วยเครื่องมือที่ชุมชนโอเพนซอร์สจะเป็นผู้ดูแล ซึ่งให้บริการเป็นแพ็กเกจที่อัปเดตได้ตามต้องการโดยไม่ต้องแบกภาระในการเปิดตัวการแก้ไขและฟีเจอร์ใหม่ในเบราว์เซอร์โดยตรง วัตถุประสงค์ของเราคือการช่วยให้นักพัฒนาแอปนำฐานข้อมูลของตนเองมาใช้ในเว็บได้
นอกจากนี้ เราหวังว่าตัวอย่างนี้จะช่วยให้ระบบนิเวศใหม่ของฐานข้อมูลโอเพนซอร์สเติบโตขึ้น การเปิดตัวแฮนเดิลการเข้าถึงระบบไฟล์ในที่สุดก็ทำให้เรามีองค์ประกอบพื้นฐานใหม่สำหรับสร้างโซลูชันพื้นที่เก็บข้อมูลที่กำหนดเอง
เหตุผลในการเลิกใช้งาน SQL ในเว็บ
ข้อกังวลด้านความยั่งยืนและความปลอดภัย
คุณต้องไม่นำข้อกำหนด Web SQL มาใช้อย่างยั่งยืน ซึ่งจะจำกัดนวัตกรรมและฟีเจอร์ใหม่ๆ มาตรฐานเวอร์ชันล่าสุดระบุว่า "User Agent ต้องใช้รูปแบบ SQL ที่ Sqlite 3.6.19 รองรับ"
เดิมที SQLite ไม่ได้ออกแบบมาเพื่อเรียกใช้คำสั่ง SQL ที่เป็นอันตราย แต่การใช้ Web SQL หมายความว่าเบราว์เซอร์ต้องทำเช่นนี้ ความจำเป็นในการอัปเดต SQLite ใน Chromium นั้นมาจากความต้องการที่จะติดตามการแก้ไขด้านความปลอดภัยและความเสถียร ซึ่งขัดแย้งโดยตรงกับข้อกําหนดของ Web SQL ว่าต้องทํางานเหมือนกับ SQLite 3.6.19 ทุกประการ
รูปแบบ API
Web SQL เป็น API ที่แสดงอายุด้วย โค้ดนี้มาจากช่วงปลายยุค 2000 และเป็นตัวอย่างที่ยอดเยี่ยมของ "นรกของคอลแบ็ก" ดังที่ตัวอย่างโค้ดต่อไปนี้ (ได้รับความอนุเคราะห์จาก Nolan Lawson) แสดงให้เห็น ดังที่คุณเห็น คำสั่ง SQL (โดยใช้ SQL Dialect ของ 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 ผลลัพธ์ที่ได้จะเป็นดังนี้
ไม่มีการสนับสนุนผู้ติดตั้งใช้งาน
นอกจากรูปร่าง API แบบ Arcane (อย่างน้อยก็จากมุมมองของวันนี้) แล้ว Mozilla ยังมีข้อกังวลมากมายเกี่ยวกับ Web SQL ที่สร้างขึ้นด้วย SQLite ดังนี้
"เราไม่คิดว่า [SQLite] เป็นพื้นฐานที่เหมาะสมสําหรับ API ที่แสดงต่อเนื้อหาเว็บทั่วไป สาเหตุสำคัญคือไม่มีมาตรฐานที่เชื่อถือได้และยอมรับกันอย่างกว้างขวางซึ่งใช้เป็นส่วนหนึ่งของ SQL ในลักษณะที่เป็นประโยชน์ นอกจากนี้ เรายังไม่ต้องการให้การเปลี่ยนแปลง SQLite ส่งผลต่อเว็บในภายหลัง และคิดว่าการใช้ประโยชน์จากรุ่นเบราว์เซอร์หลัก (และมาตรฐานเว็บ) กับ SQLite นั้นไม่รอบคอบ"
คุณสามารถอ่านเกี่ยวกับข้อกังวลของ Mozilla ได้ในบล็อกโพสต์ของ Vladimir Vukićević อดีตพนักงาน Mozilla ดูประวัติเพิ่มเติมได้ในบันทึกการประชุมของกลุ่มทํางานแอปพลิเคชันเว็บ W3C (และหากต้องการดูรายละเอียดจริงๆ โปรดอ่านบันทึก IRC) และที่เก็บอีเมล) นอกจากนี้ บล็อกโพสต์ของ Nolan Lawson ยังให้ภาพรวมที่ดีเกี่ยวกับสิ่งที่เกิดขึ้น
ความคิดเห็น
หากมีข้อกังวลใดๆ เกี่ยวกับขั้นตอนการเลิกใช้งานที่แจ้งไว้ในโพสต์นี้ โปรดแจ้งให้เราทราบในรายชื่ออีเมล blink-dev ทุกคนสามารถเป็นสมาชิกในกลุ่มนี้ได้และทุกคนมีสิทธิ์โพสต์
ลิงก์ที่เกี่ยวข้อง
- รายการ ChromeStatus: เลิกใช้งานและนํา WebSQL ในบริบทของบุคคลที่สามออก
- รายการ ChromeStatus: เลิกใช้งานและนํา WebSQL ในบริบทที่ไม่ปลอดภัยออก
- ตั้งใจที่จะเลิกใช้งานและนำออก: WebSQL ในบริบทของบุคคลที่สาม
- แผนที่จะเลิกใช้งานและนําออก: WebSQL ในบริบทที่ไม่ปลอดภัย
- ปัญหา Chromium: เลิกใช้งานและนํา WebSQL ในบริบทของบุคคลที่สามออก
- ปัญหา Chromium: เลิกใช้งานและนํา WebSQL ในบริบทที่ไม่ปลอดภัยออก
- ปัญหาเกี่ยวกับ Chromium: เลิกใช้งานและนำ WebSQL (Window#openDatabase) ออก
- SQLite Wasm ในเบราว์เซอร์ที่ระบบไฟล์ส่วนตัวของ Origin รองรับ
ขอขอบคุณ
บทความนี้ได้รับการตรวจสอบโดย Joe Medley และ Ben Morss และ Joshua Bell