JavaScript的勝利
譯文還記得曾幾何時(shí),不少朋友出于安全性考慮而選擇在自己的瀏覽器上禁用JavaScript。時(shí)至今日,這種作法已經(jīng)變得荒謬可笑——理由很簡(jiǎn)單, JavaScript已經(jīng)統(tǒng)治了整個(gè)網(wǎng)絡(luò)世界。在這個(gè)充斥著平臺(tái)多樣性的全新計(jì)算時(shí)代,我們需要那些能夠運(yùn)行在任意設(shè)備瀏覽器中的應(yīng)用程序。原生應(yīng)用可能運(yùn)行速度更快、調(diào)用更多JavaScript 無(wú)法染指的特定平臺(tái)功能,但不可否認(rèn),云時(shí)代已然來(lái)臨、我們則身處其中。有鑒于此,我們要繼續(xù)堅(jiān)持針對(duì)專一平臺(tái)編寫桌面或者移動(dòng)應(yīng)用、還是拓寬思路利用JavaScript開(kāi)發(fā)一些任何平臺(tái)都能夠接納的應(yīng)用方案?
當(dāng)然,這個(gè)問(wèn)題的具體答案取決于該應(yīng)用的實(shí)際特性。 JavaScript存在多種局限——出于安全原因, JavaScript無(wú)法對(duì)客戶端中的文件進(jìn)行讀取或者寫入。而且“真正的”程序員更傾向于不斷強(qiáng)調(diào)此類缺點(diǎn)。不過(guò)JQuery以及多種其它框架的出現(xiàn)已經(jīng)使JavaScript 獲得了構(gòu)建復(fù)雜應(yīng)用程序的能力;此外,JSON(即 JavaScript Object Notation)能夠全面取代XML的數(shù)據(jù)傳輸功能。更不用提Node.js,它剛剛在***一輪 InfoWorld Bossie評(píng)選中脫穎而出、幫助JavaScript 強(qiáng)勢(shì)進(jìn)軍服務(wù)器端。
JavaScript能走多遠(yuǎn)?
堪稱巧合的是,InfoWorld新技術(shù)論壇上同時(shí)出現(xiàn)了兩篇文章,且都以探討JavaScript的潛在發(fā)展空間為主:一篇由VisiCalc聯(lián)合創(chuàng)造者、來(lái)自Alpha Software的 Dan Bricklin撰寫,另一篇?jiǎng)t由Adobe的Divya Manian 及Thibault Imbert聯(lián)手推出。在《JavaScript在移動(dòng)平臺(tái)上擊敗原生代碼》一文中, Bricklin針對(duì)JavaScript執(zhí)行速度低于原生代碼這一假設(shè)作出了回應(yīng):
實(shí)際情況是,原生代碼所能夠完成的數(shù)學(xué)執(zhí)行運(yùn)算都能夠在JavaScript上順利實(shí)現(xiàn)(而且計(jì)算的相關(guān)時(shí)耗也并無(wú)不同)。上述觀點(diǎn)忽略了這樣一項(xiàng)客觀現(xiàn)實(shí),即對(duì)于各種不同類型的執(zhí)行與計(jì)算工作而言,基于JavaScript的應(yīng)用程序往往擁有與原生代碼相同甚至更為出色的表現(xiàn)。
為什么會(huì)這樣?Bricklin解釋稱,因?yàn)轭V堑某绦騿T多年以來(lái)一直在對(duì)瀏覽器進(jìn)行調(diào)整、旨在優(yōu)化此類執(zhí)行工作的速度表現(xiàn)。此外,瀏覽器內(nèi)高級(jí)執(zhí)行能力也迎來(lái)了顯著提高,其中***代表性的就是3D渲染功能。
從Adobe公司的立場(chǎng)出發(fā),Manian與Imbert對(duì) JavaScript的發(fā)展前景作出了預(yù)期,并提到了 Mozilla打造的研究項(xiàng)目asm.js——該項(xiàng)目“定義了一套JavaScript子集,可由編譯器生成并通過(guò)JavaScript虛擬機(jī)實(shí)現(xiàn)高度優(yōu)化。”更令人振奮的是,他們還對(duì)RiverTrail(一套由英特爾打造的、專門用于JavaScript開(kāi)發(fā)工作的并行編程模型及API)進(jìn)行了探究。兩位作者還提到Adobe正在將新型HTML 5功能推進(jìn)至標(biāo)準(zhǔn)化高度,其中包括Regions、Blend Modes以及 Shapes等。縱覽整篇文章,我們發(fā)現(xiàn)Manian與Imbert相當(dāng)于給Flash以及ActionScript這兩套行將就木的技術(shù)方案又一記猛擊。
JavaScript生態(tài)系統(tǒng)
JavaScript的勝利似乎給業(yè)界帶來(lái)了靈感,如今每周都會(huì)有一款新型框架與世人見(jiàn)面、其它與JavaScript開(kāi)發(fā)相關(guān)的工具也層出不窮:
ANGULARJS,一款用于將靜態(tài)HTML頁(yè)面轉(zhuǎn)化為JavaScript應(yīng)用的工具集,同時(shí)支持MVC架構(gòu)。 BACKBONE.JS, 一款JavaScript庫(kù),允許開(kāi)發(fā)人員向應(yīng)用中添加結(jié)構(gòu)并以Model形式表現(xiàn)數(shù)據(jù)。 BOOTSTRAP, 一款負(fù)責(zé)網(wǎng)頁(yè)設(shè)備的框架,旨在與 JQuery進(jìn)行對(duì)接。 ENYO, 一款面向?qū)ο笮蚃avaScript框架,能夠被用于創(chuàng)建HTML 5/CSS應(yīng)用。 D3, 一款JavaScript庫(kù),能夠在無(wú)需插件配合的前提下向?yàn)g覽器推送矢量圖形。 EMBER.JS, 一款前景廣闊的JavaScript框架,用于開(kāi)發(fā)MVC應(yīng)用程序開(kāi)發(fā)并配備豐富功能。 EMSCRIPTEN, 一款能夠?qū)++轉(zhuǎn)化為asm.js( Mozilla打造的高優(yōu)化性JavaScript子集)的編譯器方案。 JavaScript擁有成員眾多的支持工具陣營(yíng)——以上列舉的僅是其中最為出色的少數(shù)解決方案。
其中大部分屬于開(kāi)源項(xiàng)目,這些工具的不斷拓展也成為JavaScript強(qiáng)勁發(fā)展勢(shì)頭的重要驅(qū)動(dòng)因素。
但是……JavaScript本身又如何?
不過(guò),經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員對(duì)此擁有存在抵觸情緒。InfoWorld網(wǎng)站的Andy Oliver這樣描述他所抱持的保留態(tài)度:
JavaScript一直都是備選開(kāi)發(fā)途徑中的一員—— 我們真正要做的是考量其是否適合自己的需求…… 我接觸到的管理者喜歡JavaScript,因?yàn)樗试S開(kāi)發(fā)人員在其中使用jQuery、Node.js甚至利用 MongoDB處理一部分?jǐn)?shù)據(jù)庫(kù)事務(wù)。但我身邊的開(kāi)發(fā)人員顯然持不同觀點(diǎn),他們討厭日以繼夜地進(jìn)行 JavaScript開(kāi)發(fā)……開(kāi)發(fā)項(xiàng)目負(fù)責(zé)人同樣持抗拒情緒,因?yàn)镴avaScript犧牲掉了不少寶貴的數(shù)據(jù)庫(kù)功能。
換言之,作為一種既易于學(xué)習(xí)、又有所局限的開(kāi)發(fā)方案,JavaScript給編程工作帶來(lái)了民主化進(jìn)程 ——一旦開(kāi)發(fā)人員的工作目標(biāo)模糊不清、最終開(kāi)發(fā)成果也將變得一團(tuán)糟。
不過(guò)已經(jīng)有越來(lái)越多優(yōu)秀的JavaScript程序員逐步成長(zhǎng)起來(lái),其中不少都能在asm.js或者英特爾 RiverTrail并行編程模型的支持下打造出卓越的工作成果。而且毫無(wú)疑問(wèn),他們并沒(méi)有在工作中受到缺乏相關(guān)工具的困擾。不過(guò)最出色的并不一定能獲得最終勝利。對(duì)于x86指令集來(lái)說(shuō),笑到***的可能也是惟一有能力活到***的。我不知道JavaScript要如何實(shí)現(xiàn)自身擴(kuò)展來(lái)迎合開(kāi)發(fā)人員的工作需求,例如打造整體功能的豐富程度可與微軟Office比肩的復(fù)雜應(yīng)用程序。不過(guò)鑒于通過(guò)瀏覽器窗口觀察世界的方式實(shí)在有點(diǎn)別扭,至少我本人不會(huì)把壓箱底的資金投入到這類項(xiàng)目身上。