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