ลอส นักพัฒนา SQLite กำลังพัฒนาโครงการที่จะนำไปใช้ ความสามารถในการรวบรวมห้องสมุดเป็น รหัส WebAssembly ระดับกลาง ซึ่งสามารถเรียกใช้ในเว็บเบราว์เซอร์และเหมาะสำหรับการจัดระเบียบงานกับฐานข้อมูลจากเว็บแอปพลิเคชันในภาษาจาวาสคริปต์
วัตถุประสงค์ ของโครงการ คือการจัดเตรียมลิงก์ JavaScript ที่ใช้งานได้ ที่เหมือนกันในการทำงานกับ SQLite API นักพัฒนาเว็บได้รับอินเทอร์เฟซเชิงวัตถุระดับสูงสำหรับการทำงานกับข้อมูลในรูปแบบของ sql.js หรือ Node.js ห่อ C API ระดับต่ำและ API ตามกลไก Web Worker ที่อนุญาตให้สร้างแบบอะซิงโครนัส controllers ที่ทำงานบนเธรดที่แยกจากกัน
ในการซ่อนความซับซ้อนของเธรดบน API ของ Web Worker ตัวแปรของ อินเทอร์เฟซการเขียนโปรแกรมตามกลไก สัญญา.
ข้อมูลที่เว็บแอปพลิเคชันจัดเก็บในเวอร์ชัน WASM ของ SQLite สามารถอยู่ในเซสชันปัจจุบัน (สูญหายหลังจากโหลดหน้าซ้ำ) หรือคงอยู่ในฝั่งไคลเอ็นต์ (คงอยู่ตลอดเซสชัน)
สำหรับการจัดเก็บถาวร แบ็กเอนด์ได้เตรียมที่จะใส่ข้อมูลบนระบบไฟล์ในเครื่อง โดยใช้ OPFS (Origin-Private FileSystem ซึ่งเป็นส่วนขยายของ File System Access API ซึ่งปัจจุบันมีให้ใช้งานในเบราว์เซอร์ที่ใช้ WebKit และ Chromium เท่านั้น) และที่เก็บข้อมูลในเครื่องของเบราว์เซอร์ตาม window.localStorage และ window.sessionStorage API
เมื่อใช้ localStorage/sessionStorage ข้อมูลจะถูกจับคู่กับที่เก็บคีย์/ค่าที่เหมาะสม ในขณะที่เมื่อใช้ OPFS มีสองตัวเลือก: จำลอง FS เสมือนโดยใช้ WASMFS และการใช้งาน sqlite3_vfs แยกกันซึ่งมีชั้น VFS ที่ใช้ SQLite ใน OPFS .
คอมไพเลอร์ Emscripten ใช้เพื่อสร้าง SQLite ในการแสดง WASM. ผลลัพธ์คือไฟล์ sqlite3.js และ sqlite3.wasm ที่คุณสามารถรวมไว้ในโปรเจ็กต์ JavaScript ของคุณ (ตัวอย่าง HTML และ JavaScript)
ของวัตถุประสงค์เฉพาะ ของโครงการนี้กล่าวถึง:
ให้จัดเตรียม wrapper ที่สมบูรณ์ของคุณสมบัติสำหรับ sqlite3 C API ยกเว้นที่ระบุไว้ในส่วนที่ไม่ใช่เป้าหมาย เท่าที่คุณสมบัติที่เท่าเทียมกันของ WASM กับ C อนุญาต อันที่จริง ระบุ API ต่อไปนี้เป็นอย่างน้อย
- ผูก sqlite3 API ระดับต่ำที่ใกล้เคียงกับเนทีฟมากที่สุดในแง่ของการใช้งาน
- OO API ระดับที่สูงกว่า เหมือนกับการใช้งานสไตล์ sql.js และ node.js
- API ตามผู้ปฏิบัติงานที่สื่อสารกับ API ข้างต้นผ่านข้อความของผู้ปฏิบัติงาน สิ่งนี้ออกแบบมาเพื่อใช้กับเธรดหลัก โดยมี API ระดับล่างติดตั้งอยู่บนเธรดของผู้ปฏิบัติงาน และสื่อสารกับพวกเขาผ่านข้อความของผู้ปฏิบัติงาน
- ตัวแปรตามสัญญาของ Worker API ที่ซ่อนแง่มุมการสื่อสารระหว่างเธรดของผู้ใช้อย่างสมบูรณ์
- ในขอบเขตที่เป็นไปได้ สนับสนุนการจัดเก็บข้อมูลถาวรฝั่งไคลเอ็นต์โดยใช้ JS API ที่มีอยู่ ในขณะที่เขียนบทความนี้ ซึ่งรวมถึงซอร์สไฟล์ส่วนตัวของระบบ (OPFS) และที่เก็บข้อมูล (จำกัดมาก) ผ่านแบ็กเอนด์ window.localStorage และ .window.sessionStorage
ส่วน วัตถุประสงค์ที่ไม่เฉพาะเจาะจง:
- เนื่องจาก WASM เป็นเทคโนโลยีที่เน้นเว็บเป็นหลัก และ UTF-8 เป็นราชาแห่งการเข้ารหัสในขอบเขตนั้น จึงไม่มีแผนรองรับ sqlite3 API ที่เกี่ยวข้องกับ UTF16 ในปัจจุบัน
- แม้ว่าการรองรับรันไทม์ WASM นอกเบราว์เซอร์นั้นแพร่หลาย แต่ปัจจุบันโปรเจ็กต์นี้ (ปลายปี 2022) เน้นที่เป้าหมายเบราว์เซอร์เท่านั้น แม้ว่ารายละเอียดการใช้งานที่เกี่ยวข้องกับเว็บจะมีความสำคัญเหนือกว่า และส่วนประกอบ JavaScript ของ API มุ่งเน้นไปที่ไคลเอ็นต์เบราว์เซอร์โดยเฉพาะ โมดูล WASM ระดับล่าง "ควร" ทำงานในสภาพแวดล้อมที่ไม่ใช่ WASM บนเว็บ
- ความเข้ากันได้กับแพลตฟอร์มเก่าหรือเฉพาะ WASM ออกแบบมาสำหรับเว็บสมัยใหม่และต้องการแพลตฟอร์มที่ทันสมัย ในทำนองเดียวกัน ตัวเลือกไลบรารี sqlite3 ที่เลิกใช้แล้วจะถูกลบออกจากอินเทอร์เฟซ WASM ทั้งหมด
เพิ่มโค้ดสำหรับการสนับสนุน WebAssembly ลงในที่เก็บหลักของโปรเจ็กต์แล้ว ไม่เหมือนกับ WebSQL API ซึ่งใช้ SQLite เพราะ WASM SQLite นั้นแยกออกจากเบราว์เซอร์โดยสิ้นเชิงและไม่ส่งผลต่อความปลอดภัย (Google ตัดสินใจเลิกรองรับ WebSQL ใน Chrome หลังจากมีช่องโหว่หลายจุดใน SQLite ที่สามารถโจมตีผ่าน WebSQL เพื่อโจมตี Navigator ).
ในที่สุดถ้าคุณเป็น สนใจเรียนรู้เพิ่มเติมคุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.