IndexedDB是一個 正在制定中的用于瀏覽器中大數據量的結構化數據存貯和針對這種數據的高效能索引查詢的web標準。 Mozilla已經向w3組織提交了收集到的大量的針對這個規范的重 要反饋資料。 而且我們計劃在Firefox 4中實現這個規范。 我們告訴杰出的web開發者們,我們要制定一個優秀的web上的結構化數據存儲API。
與此同時,有幾種版本的Safari, Chrome, 和 Opera 支持一種叫做Web SQL Database的技術,這種技術是使用SQL語 句作為字符串類型的參數傳入到javaScript API里,我們認為,開發人員的美學立場是一個重要的考慮因素,因此對于客戶端 的 web應用程序來說,這是一種極丑陋的解決方案。 我們把開發人員的反饋意見給了IndexedDB規范說明書的編輯, 我們還跟 微軟討論過,他們同意我們的看法,認為IndexedDB 對于web是一個不錯的選擇。 隨著Chrome 瀏覽器團隊即將實現這個規范, 我們有必要在這里解釋一下我們的設計決策,以及為什么我們認為對于web來說,IndexedDB是一個比Web SQL Database更好的解決方案。
運行在IE 8+, Safari 4+, Chrome 4+, Opera 10.5+ 和 Firefox 2+ 上的Web應用程序已經能夠利用localStorage
和 sessionStorage
通過簡單的Javascript API存儲key-value形式的數據。 這種已經被廣泛實現的Web存儲標準 (包括localStorage
和 sessionStorage
)只是適用于小數據量的數據,而對于大數據量的結 構化數據的存儲就力不從心了。 雖然很多服務器端的數據庫都使用SQL來編程操作結 構化數據、有針對性的查詢數據,但在客戶端,在JavaScript API里使用SQL,存在著很大的爭議。
很多的web開發人員都非常熟悉SQL, 因 為他們既跟客戶端的代碼打交道(例如JavaScript,,CSS以及標記語言),同時也跟服務器端代碼大交道(例如php和數據庫操作)。 然而,盡管受人喜歡的SQL廣泛使用,我們卻沒有一個統一的SQL規范來定義這種技術。 特別的,SQLite雖然支持大部分的SQL-92標 準,但也有不少明顯的缺失,而WebDatabase API就是以它為基礎的。 SQLite它自己并不是一種規范 — 它是一種開發完成的技術! 而最好的用來說明SQLite支持哪些SQL子集的定義文檔就是這個SQLite使用手冊。 為了能使Web SQL Database向真正正確的方向發展,我們必須首先為web應用程序定義一個有意義的SQL子集。 當JavaScript本身已經有了很多的優秀解決方案的同時,我們為什么要定義出另外一種語言呢?
我們認為SQLite是一種非常有用的技術,它已經成為Firefox有效的擴展組件和受信任的軟件。 可我們不認為它是一個合適的對外公開用來生成web內容的API的基礎程序, 完全不適合,因為我們沒有一個可信任的、廣泛接受的標準來正確的規范SQL子集。 除此之外,我們不希望以后會由于SQLite的變動而影響到整個web, 也不認為把各大瀏覽器(以及web標準)都約束到SQLite上是一種明智的做法。 IndexedDB不存在這些問題;甚至我們可以把對IndexedDB底層的實現基于SQLite之上, 我們通過發布一些不依賴于SQLite語法語義的API將開發人員和SQLite隔離開。
去年,我們在Mozilla校園里舉辦了一次峰會,主要討論web上的存儲。 我們邀請web開發人員告訴我們他們的理想的web上的結構化數據存儲API的樣子。 很多人表示有保留的接受以SQLite為基礎的API,因為他們在一些瀏覽器里都使用過Web SQL Database,他們認為有些東西“有”總比“沒有”強、比還只是一些概念的東西強。 當然,所有的聲音都熱情的希望一種更好的設計方案,期望一種更易處理的更簡單的模式。 我們看著程序員們在白板上繪制一個簡單的BTree API,將他們遇到的應用程序上對數據存儲的要求添加到上面,這激勵著我們去重視他們的意見。 我們達成一致,認為使用字符串表示SQL語句缺乏作為“web原生”的JavaScript API的優雅,應該尋找一種替換設計。我們和微軟一起征求關于IndexedDB議案的回饋,有幸成為為這個標準努力的活躍分子。
在另外一篇文章里,我們將 IndexedDB和Web SQL Database進行了對比,注意到前者提供了一種比后者跟簡單的語法。 IndexedDB給第三方開發者開發JavaScript代碼庫提供了完全的空間,讓他們可以通過BTree API完全駕馭下層基礎, 我們非常期待像BrowserCouch這 樣的構建于IndexedDB之上的具有首創精神的成果出現。 堅定無畏的開發人員們實際上可以在IndexedDB上開發出一個SQL API。 我們特別的期望看到一種基于IndexedDB的Web SQL Database API實現, 我們認為這在技術上是能做到的。在瀏覽器里使用SQL-based API基本上不是一種合適的入手途徑,但在IndexedDB上的SQL-based APIs還是有它的空間的。
我們希望繼續和web開發人員們探討web上的數據存儲,這能幫助我們整理關于產品功能和未來web標準的思路。 我們期待著下一代的web應用程序能夠在索引過的數據上執行高性能的查詢操作,期望web應用能在“airplane模式”下更健壯的運行。
文/外刊IT評論
新聞熱點
疑難解答