HTML5與PhoneGap上的儲存方案

剛開始接觸 PhoneGap 的時候,我就決定採用 File 的方式進行資料的儲存。原因是因為 W3C 早就把 WebSQL 踢出標準之外。不過實際使用之後,覺得效率上不夠理想,就開始試著尋找替代的儲存方案。不過得出來的結論,依然是沒有什麼變化……

PhoneGap 採用的是 HTML5 的語法,支援的儲存方式主要有三種(參考官方文件):LocalStorage、WebSQL 與 IndexedDB。第一種包括了單次連線儲存的 sessionStorage,和永久儲存的 localStorage。前者在連線中斷時就會消失,後者除非程式或使用者特別刪除,否則會一直存在。由於 LocalStorage 的儲存方式只有純文字,不方便儲存複雜的結構,所以需要另外兩種資料庫來支援。

WebSQL 和 IndexedDB 仍然是完全不同種類的資料庫。前者是關連式資料庫,後者是索引式資料庫。由於關連式資料庫在面對現今即時回饋與大量資料的需求上,運行的效率不佳,因此 NoSQL 的資料庫開始盛行。IndexedDB 是利用 key/value 的方式儲存資料,但是 value 允許複雜的資料結構,可以把它想像成一個 JSON 的資料庫,是物件導向的資料結構,缺點是無法進行模糊搜尋(參考MDN介紹)。

然而,WebSQL 已經在死亡名單上了,既然如此,還要使用它嗎? WebSQL的網站支援列表上,已經明確的指出未來可能不再被支援。而 IndexedDB的網站支援列表則顯示各家的瀏覽器開始支援其運作。既然如此,我們用 IndexedDB 好嗎? 不幸的是,PhoneGap的文件上已經明確的告訴我們,Android 和 iOS 都不支援 IndexedDB。

我在網路上有找到一篇文章,提供 API 將我們撰寫的 IndexedDB 語法轉成 WebSQL (參見《在windows8、Android、IOS上使用indexedDB》)。我自己目前沒有打算使用,但提供給有興趣的人參考。我想我還是會想辦法利用 LocalStorage 和 File 來進行儲存吧。可惜 LocalStorage 有容量上的限制(每家瀏覽器不同),不然用它來作索引式資料庫也無不可。

關於 PhoneGap 上的檔案存取,請參考:檔案存取(一)檔案存取(二)