Indexed DB หรือนี่จะเป็นมาตรฐานการเก็บข้อมูลออฟไลน์ของ HTML5?

by mk
15 March 2010 - 03:56

ทุกวันนี้เราพูดถึง HTML5 กันมาก แต่แท้จริงแล้ว มาตรฐาน (ตามกระบวนการของ W3C) ยังไม่เสร็จครับ แถม HTML5 ประกอบด้วยฟีเจอร์หลายส่วน เช่น <video>, <canvas>, web workers, geolocation ฯลฯ

ข่าวนี้จะพูดถึงฟีเจอร์การเก็บข้อมูลของเว็บแอพพลิเคชันแบบออฟไลน์ครับ หรือที่เรียกกันว่า local storage

DOM Storage

แนวคิดของการเก็บข้อมูลออฟไลน์นั้น มีรากเหง้ามาตั้งแต่คุกกี้ในเบราว์เซอร์ แต่ภายหลังเมื่อเว็บแอพพลิเคชันพัฒนาขึ้น ก็เกิดความต้องการเก็บข้อมูลที่มีความสามารถมากกว่าเดิม ก่อนหน้านี้สัก 2-3 ปี ก็มีความพยายามผลักดันวิธีเก็บข้อมูลที่เรียกว่า Web Storage หรือ DOM Storage หรือ LocalStorage (เท่าที่ผมค้นข้อมูลดู คนนิยมเรียก DOM Storage กันมากที่สุด แต่ตามมาตรฐานของ W3C เรียกว่า Web Storage)

เว็บเบราว์เซอร์ในปัจจุบันทุกตัวรองรับ DOM Storage ผมเข้าใจว่าเริ่มตั้งแต่ Firefox 2 (Mozilla DOM Storage) และ Safari 4 นอกจากนี้ยังมี IE8 (MSDN Dom Storage), Chrome 4 และ Opera 10.50

หมายเหตุ: DOM Storage ใช้กับเว็บเพจ-เว็บแอพพลิเคชันเท่านั้น เป็นคนละตัวกับ mozStorage ของ Firefox ที่ extension ใช้เก็บข้อมูล

ปัญหาของ DOM Storage คือมันออกแบบมาสำหรับเบราว์เซอร์ที่มีโพรเซสเดียว พอมาเจอ Chrome และ Firefox (ในอนาคต) ที่มีหลายโพรเซสทำงานพร้อมกัน ก็เจอปัญหาการเข้าถึงข้อมูลชุดเดียวกันจากหลายโพรเซส

มีคนเสนอทางแก้ 2 ทาง

Web SQL Database

ชื่อเต็มของมันคือ Web SQL Database แต่บางคนอาจเรียก Web DB คนเสนอร่างมาตรฐานนี้คือแอปเปิล ปัจจุบันมันยังเป็น "ร่าง" ที่อยู่ในกระบวนการพิจารณาของ W3C

แนวทางนี้ก็ตามชื่อครับ คือนำฐานข้อมูล SQL มาใส่ในเบราว์เซอร์ ปัญหาของมันคือ SQL ที่ใช้กันทุกวันนี้ดันมีหลายเวอร์ชัน และในสเปกของ Web SQL Database ดันไม่ได้ระบุว่าจะใช้ SQL เวอร์ชันไหน (แต่ Safari ใช้ SQLite) นอกจากนี้มันยังมีข้อเสียตรงที่ซับซ้อนเกินไป เพราะเป็นคำสั่ง SQL เต็มขั้น

เบราว์เซอร์ที่รองรับ Web SQL Database ในตอนนี้มี Safari 4 และ Chrome (ที่ได้อานิสงส์จาก WebKit)

Indexed Database API

ชื่อเต็ม Indexed Database API หรืออาจใช้ว่า Indexed DB หรือ WebSimpleDB

เป็นอีกร่างมาตรฐานหนึ่งที่เสนอโดย Oracle แนวทางนี้ได้รับการสนับสนุนจากไมโครซอฟท์ กูเกิล และ Mozilla (รวมส่วนแบ่งตลาดเบราว์เซอร์ประมาณ 90%) ส่วน Opera นั้นยังไม่ฟันธง แต่ตัวแทนของ Opera ได้ให้ความเห็นว่า "ชอบวิธีนี้มากกว่า"

แนวทางนี้มีความซับซ้อนน้อยกว่า Web SQL Database เพราะใช้ API แบบเดียวกับของ ISAM ที่ซับซ้อนน้อยกว่าการใช้ SQL query (แนวทางนี้ไม่มี query และ schema) ผลลัพธ์ที่ได้จากการเรียก API จะออกมาเป็นออปเจคต์ใน JavaScript เลย

ผู้สนับสนุนแนวทางนี้ให้ความเห็นว่า มันออกแบบมาให้ JavaScript framework ต่างๆ เช่น jQuery หรือ Dojo เรียกใช้อีกต่อหนึ่ง ดังนั้นในทางปฏิบัติแล้ว นักพัฒนาเว็บแอพพลิเคชันจะสามารถเรียกใช้ผ่าน JavaScript framework ได้ง่ายกว่า (อันนี้ผมไม่ชัวร์ว่า framework ต่างๆ จะสนับสนุน Web SQL Database ด้วยหรือไม่นะครับ)

ตอนนี้มีแนวโน้มว่า Indexed DB จะชนะสูงมาก ฝ่ายแอปเปิลยังไม่ออกความเห็นกับเรื่องนี้ แต่กูเกิลได้เริ่มส่งโค้ดของ Indexed DB เข้า WebKit แล้ว ถ้าทุกฝ่ายตกลงกันได้ การที่ Safari จะรองรับ Indexed DB ด้วย คงไม่ยากอะไรนักในทางเทคนิค

ที่มา - CNET, HTML5 does databases

Blognone Jobs Premium