下一代的 web 已經(jīng)開(kāi)始上路了,就在這個(gè)星期,MySpace 集成了 Google Gears,雅虎發(fā)布了新的 BrowserPlus,Google 的瀏覽器版三維地球也上線了。類(lèi)似 AIR、Silverlight、JavaFX、Gears、XUL、Web Applications 1.0 (DOM5, HTML5 等) 這樣的技術(shù)和格式讓開(kāi)發(fā)者能夠超過(guò) AJAX 加速?zèng)_向下一代的,有著更好的性能、更多的功能,而且和桌面集成的更加緊密的 web 程序。
現(xiàn)在,因?yàn)楦鱾(gè)公司都急于展示他們自己的下一代 web 的樣子,導(dǎo)致開(kāi)發(fā)者和用戶(hù)都被前所未有的超多 web 技術(shù)所壓迫;“DLL 地獄”也被“插件地域”所取代。但是在 web 上,這樣過(guò)多的選擇會(huì)導(dǎo)致用戶(hù)和開(kāi)發(fā)者的成本增加。第一次 web 格式大戰(zhàn)已經(jīng)過(guò)去十多年了,那個(gè)時(shí)候微軟、網(wǎng)景、蘋(píng)果、美國(guó)在線還有其他公司都在瀏覽器標(biāo)準(zhǔn)、腳本語(yǔ)言、web 服務(wù)等方面成立了不同的基金會(huì)。這次大戰(zhàn)的影響一直持續(xù)到現(xiàn)在,例如 Javascript 開(kāi)發(fā)者需要依賴(lài) 整套的代碼庫(kù) 來(lái)開(kāi)發(fā)跨瀏覽器代碼,CSS 開(kāi)發(fā)者需要一系列 hack 才能讓他們的站點(diǎn)能夠在不同的瀏覽器中看起來(lái)都一樣。
現(xiàn)在新一代的富 web 程序技術(shù)還都在開(kāi)發(fā)階段,所以還有機(jī)會(huì)采用基于標(biāo)準(zhǔn)的態(tài)度,來(lái)避免重蹈覆轍。幸虧有了過(guò)去十多年的教訓(xùn),現(xiàn)在連微軟這樣的公司都在以更加開(kāi)放的姿態(tài)來(lái)接納開(kāi)放標(biāo)準(zhǔn)、數(shù)據(jù)遷移還有跨平臺(tái)支持。不管是用戶(hù)還是開(kāi)發(fā)者,對(duì)開(kāi)放標(biāo)準(zhǔn)的廣泛支持都能簡(jiǎn)化他們用到的技術(shù),但是明顯的,并不是所有當(dāng)前發(fā)布的新技術(shù)都能支持開(kāi)放標(biāo)準(zhǔn)。
在 Techcrunch 這一系列帖子里,我們來(lái)看看這些組成新一代 web 的各種元素,并且評(píng)估可用的選項(xiàng),當(dāng)前支持的標(biāo)準(zhǔn)以及對(duì)標(biāo)準(zhǔn)的采用情況。由于 MySpace 剛剛宣布他們?cè)诔绦蚶锩媸褂昧?Google Gears,那么我們的第一篇就來(lái)評(píng)估基于瀏覽器的本地緩存。
基于瀏覽器的本地存儲(chǔ)
隨著基于 web 的應(yīng)用程序逐漸流行,就有了希望能夠離線運(yùn)行這些程序的需求。第一個(gè)不需要任何插件或者獨(dú)立程序的解決方案是那些靠緩存 HTTP 頭信息來(lái)在瀏覽器緩存里存儲(chǔ)信息的方法。類(lèi)似 Dojo 對(duì)離線 web 應(yīng)用的支持這樣的 Javascript 庫(kù)使用的就是這樣的原理,但是這樣的程序應(yīng)用范圍非常狹窄,因?yàn)闆](méi)有一個(gè)好的辦法在瀏覽器里存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù)。(Dojo 現(xiàn)在引用了很多包括 Gears 在內(nèi)的其他的存儲(chǔ)引擎——提示:Dylan)
在 2007 年 5 月,Google 發(fā)布了Google Gears,一個(gè)瀏覽器插件,它允許 web 程序把數(shù)據(jù)同步到本地存儲(chǔ)器,然后可以離線使用這些 web 程序。在 Gears 發(fā)布會(huì)上,Google Reader 被重寫(xiě)以支持 Gears,Gears 的突出的重點(diǎn)是離線訪問(wèn)應(yīng)用程序。但是不被所知的是,Gears 不僅僅能夠用來(lái)離線訪問(wèn),它還提供這三大功能:
緩存資源(HTML 頁(yè)面、圖片等)
在數(shù)據(jù)庫(kù)中存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)
異步后臺(tái)工作線程
在這部分我們關(guān)注的是本地對(duì)象和結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。Gears 通過(guò) Javascript API 來(lái)提供相應(yīng)的功能,這些 API 可以被任何 web 程序訪問(wèn)到。Sqlite,一個(gè)輕量級(jí) RDBMS,提供了結(jié)構(gòu)化存儲(chǔ)的支持。由于使用了本地?cái)?shù)據(jù)庫(kù),開(kāi)發(fā)者不僅可以執(zhí)行查詢(xún)、插入新紀(jì)錄這樣的操作,還能執(zhí)行更復(fù)雜的 SQL 操作,例如連接多表查詢(xún)等。盡管你可以有多個(gè)使用 Gears 的程序,但是每個(gè)程序都要運(yùn)行在一個(gè)基于域名的安全模型的沙盒環(huán)境里(類(lèi)似 cookie 和 AJAX 請(qǐng)求)。雖然 Sqlite 已經(jīng)嵌入 Firefox 2.0 以后的版本,但是它的 API 只能夠被 Firefox 核心組件或者附加模塊訪問(wèn)到。Gears 插件彌補(bǔ)了這個(gè)缺陷,讓客戶(hù)端腳本環(huán)境也能夠訪問(wèn)到這些 API。
在 Gears 發(fā)布前,萬(wàn)維網(wǎng)超文本應(yīng)用程序技術(shù)工作組 (WHATWG) 已經(jīng)著手制定 Web 程序規(guī)范 1.0 草案,這個(gè)草案把結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)包括到了 HTML5 里。該草案當(dāng)前版本包含了對(duì)訪問(wèn)數(shù)據(jù)庫(kù)對(duì)象和查詢(xún)本地?cái)?shù)據(jù)存儲(chǔ)的定義。實(shí)現(xiàn)的細(xì)節(jié)雖然交給了各個(gè)公司去完成,不過(guò)規(guī)范里面已經(jīng)詳細(xì)說(shuō)明了 API 的細(xì)節(jié)。Firefox 將會(huì)在 3.0 版里實(shí)現(xiàn)一部分和 WHATW 規(guī)范一樣的存儲(chǔ) API,不過(guò)這個(gè)版本現(xiàn)在只有預(yù)覽版可用。WHATWG 規(guī)范里的關(guān)鍵部分有:
程序緩存 ——在本地瀏覽器緩存里存儲(chǔ)對(duì)象(包含校驗(yàn))。
navigator.onLine——測(cè)試瀏覽器是否在線(使用緩存,如果需要?jiǎng)t加上本地?cái)?shù)據(jù)存儲(chǔ))。
存儲(chǔ)界面和事件——用來(lái)通過(guò) sessionStorage DOM 屬性存儲(chǔ)“名稱(chēng)/值”對(duì)。
數(shù)據(jù)庫(kù)界面——用來(lái)連接本地?cái)?shù)據(jù)庫(kù)。支持 SQL語(yǔ)法(或者其子集,取決于使用的服務(wù)器)、版本控制和錯(cuò)誤回調(diào)事件。
線程和回調(diào)——這樣多個(gè)請(qǐng)求就能夠異步發(fā)送給本地?cái)?shù)據(jù)存儲(chǔ)。
調(diào)用本地存儲(chǔ)、緩存和離線訪問(wèn)相對(duì)來(lái)說(shuō)很簡(jiǎn)單。程序首先檢查是否支持相應(yīng)的函數(shù),然后通過(guò)在后臺(tái)同步用戶(hù)數(shù)據(jù)進(jìn)程來(lái)設(shè)置本地緩存。當(dāng)一個(gè)線程在運(yùn)行的時(shí)候,不管是上傳還是下載,你可以查詢(xún)進(jìn)程狀態(tài)并且給用戶(hù)一個(gè)反饋(例如一個(gè)進(jìn)度條)。一旦數(shù)據(jù)本地化,由于是在本地機(jī)器上運(yùn)行數(shù)據(jù)庫(kù),開(kāi)發(fā)者就能大幅度的提高查詢(xún)性能。當(dāng)下很多 web 程序僅僅把瀏覽器用作展示層,例如,電子表格軟件就是做 =1+1 這樣簡(jiǎn)單的計(jì)算也要進(jìn)行一次到服務(wù)器再返回的請(qǐng)求。通過(guò)使用本地?cái)?shù)據(jù)存儲(chǔ)和客戶(hù)端代碼,開(kāi)發(fā)者可以減少到處理和存儲(chǔ)到客戶(hù)端的負(fù)荷,同時(shí)還能提供給用戶(hù)更加平滑、類(lèi)似桌面程序的體驗(yàn)。
出處:譯言
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 下一代web:瀏覽器存儲(chǔ)支持 [2]
◎進(jìn)入論壇網(wǎng)站綜合、網(wǎng)頁(yè)制作版塊參加討論
|