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