統(tǒng)治網(wǎng)絡(luò):JavaScript的勝利
譯文JavaScript正憑借新型工具與功能提升以極度夸張的速度吞噬整個(gè)世界。我們是否應(yīng)該接受這一無法逆轉(zhuǎn)的趨勢(shì)?
還記得那些舊日往事嗎?很多用戶因?yàn)閾?dān)心安全問題而在瀏覽器中禁用JavaScript。如今這樣的擔(dān)憂已經(jīng)顯得相當(dāng)可笑——JavaScript已經(jīng)成為統(tǒng)治網(wǎng)絡(luò)世界的絕對(duì)王者。
在以平臺(tái)多樣性為標(biāo)志的計(jì)算時(shí)代之下,我們需要能夠運(yùn)行在任何設(shè)備瀏覽器當(dāng)中的應(yīng)用程序。原生應(yīng)用的運(yùn)行速度也許更快、對(duì)于特定平臺(tái)的功能利用效果也非JavaScript可及,但云時(shí)代的來臨顯著縮小了二者之間的差距。現(xiàn)在擺在開發(fā)人員面前的道路有兩條:針對(duì)桌面系統(tǒng)或者移動(dòng)平臺(tái)開發(fā)只能運(yùn)行在單一環(huán)境下的應(yīng)用,或者編寫能為任何用戶所使用的JavaScript應(yīng)用。
當(dāng)然,以上問題的具體答案取決于應(yīng)用程序的具體特性。JavaScript擁有明顯的局限性——舉例來說,出于安全原因,JavaScript無法讀取或者寫入客戶端中的文件。而且“真正”的程序員更傾向于利用自身技術(shù)水平在應(yīng)用中使用大量快捷的開發(fā)方式。不過JQuery及其它一系列框架的出現(xiàn)讓JavaScript具備了開發(fā)高復(fù)雜性應(yīng)用程序的能力,而JSON(即JavaScript 對(duì)象表示法)能夠?qū)崿F(xiàn)除XML之外的全部數(shù)據(jù)傳輸需求。更不用提Node.js為JavaScript帶來的強(qiáng)大服務(wù)器端事務(wù)處理能力。
JavaScript還能走多遠(yuǎn)?
巧合的是,InfoWorld網(wǎng)站新技術(shù)論壇上的兩篇***博文都在討論JavaScript的未來發(fā)展?jié)摿Γ阂黄蒝isiCalc聯(lián)合創(chuàng)始人兼技術(shù)老鳥Dan Bricklin所撰寫,另一篇?jiǎng)t由Adobe公司的Divya Manian與Thibault Imbert撰寫。
在題為《JavaScript在移動(dòng)平臺(tái)擊敗原生代碼》的文章中,Bricklin針對(duì)JavaScript運(yùn)行速度低于原生代碼的假設(shè)提出質(zhì)疑:
盡管總體來說,原生代碼在數(shù)學(xué)計(jì)算方面的執(zhí)行速度確實(shí)要遠(yuǎn)遠(yuǎn)勝過JavaScript,但這種觀點(diǎn)忽略了眾多應(yīng)用程序之間彼此獨(dú)立的運(yùn)行狀態(tài)。在很多運(yùn)行過程中,JavaScript應(yīng)用程序的性能表現(xiàn)往往能夠贊同甚至優(yōu)于原生代碼。
為什么會(huì)這樣?根據(jù)Bricklin的解釋,這是因?yàn)楸姸嘟艹龅某绦騿T已經(jīng)花了數(shù)年時(shí)間對(duì)瀏覽器進(jìn)行調(diào)整,從而實(shí)現(xiàn)了運(yùn)行過程的極端優(yōu)化。另外,瀏覽器中已經(jīng)逐步出現(xiàn)多種先進(jìn)的運(yùn)行機(jī)制進(jìn)展,例如3D渲染。
作為Adobe公司的代言者,Manian與Imbert分析了JavaScript的未來前景并提到Mozilla公司的研究項(xiàng)目asm.js。該項(xiàng)目“定義了一套JavaScript子集,通過編譯器生成并利用JavaScript虛擬機(jī)實(shí)現(xiàn)高度優(yōu)化。”更令人興奮的是,他們還探討了RiverTrail這款由英特爾負(fù)責(zé)開發(fā)的并行編程模型及API——當(dāng)然也是專為JavaScript所打造。兩位作者同時(shí)談到,Adobe公司建議為HTML 5功能引入新的標(biāo)準(zhǔn)化機(jī)制,其中包括Regions、Blend Modes以及Shapes等。
通過或明或暗的各種跡象,我們幾乎可以斷定,Manian與Imbert通過自己的博文給Flash及ActionScript的墳?zāi)褂痔砹艘话淹痢?/p>
JavaScript生態(tài)系統(tǒng)
JavaScript的勝利宣言絕非憑空想象——幾乎每周都會(huì)出現(xiàn)新的JavaScript框架以及與編碼相關(guān)的其它工具。除了jQuery與Node.js,今年InfoWorld網(wǎng)站評(píng)選的***開源軟件獎(jiǎng)中出現(xiàn)了七位JavaScript贏家的身影,它們分別是:
◆ AngularJS,一套用于將靜態(tài)HTML頁面轉(zhuǎn)化為JavaScript應(yīng)用程序的工具集,同時(shí)提供對(duì)MVC架構(gòu)的支持。
◆ Backbone.js,一套JavaScript庫,幫助開發(fā)人員將結(jié)構(gòu)作為模型添加到應(yīng)用程序及表示數(shù)據(jù)當(dāng)中。
◆ Bootstrap,一款響應(yīng)式Web設(shè)計(jì)框架,旨在與jQuery相結(jié)合。
◆ Enyo,一款面向?qū)ο蟮腏avaScript框架,能夠被用于創(chuàng)建HTMl 5/CSS應(yīng)用。
◆ D3,一套JavaScript庫,能夠在無需涉及插件的前提下在瀏覽器內(nèi)實(shí)現(xiàn)矢量圖形處理。
◆ Ember.js,一款***發(fā)展前景的JavaScript框架,用于開發(fā)具備豐富功能的MVC應(yīng)用程序。
◆ Emscripten,一款將C++代碼轉(zhuǎn)化為asm.js形式的編譯器,屬于由Mozilla公司推出的經(jīng)過高度優(yōu)化的JavaScript子集。
上述陣容可謂極度強(qiáng)大——而且這還只是JavaScript麾下力量的冰山一角。這些工具仍處于迅猛的發(fā)展態(tài)勢(shì)之中,且大部分屬于開源項(xiàng)目,它們的存在將繼續(xù)推動(dòng)JavaScript的未來改進(jìn)。
但是……JavaScript能行嗎??
然而,經(jīng)驗(yàn)豐富的開發(fā)人員對(duì)JavaScript仍然有些反感。InfoWorld網(wǎng)站的Andy Oliver就這樣闡明了自己的態(tài)度:
讓JavaScript實(shí)現(xiàn)全面普及并非不可能——我們只需要幫自己判斷,這到底是不是個(gè)好主意……我的頂頭上司就很喜歡這種方式,組織起一大群能夠利用jQuery以及Node.js的開發(fā)人員——他們***還能簡(jiǎn)單用用MongoDB等輕量級(jí)數(shù)據(jù)庫。但我身邊的開發(fā)人員顯然很抵觸這種成天跟JavaScript打交道的工作習(xí)慣……項(xiàng)目管理者也不希望把自己的寶貴數(shù)據(jù)庫交到一幫JavaScript開發(fā)者的手中。
換句話來說,JavaScript是一種既簡(jiǎn)單易學(xué)、又有些拙手笨腳的編程機(jī)制——這將導(dǎo)致編寫代碼的開發(fā)人員陷入混亂、甚至搞不清自己到底在做些什么。
不過杰出JavaScript程序員的隊(duì)伍正在不斷擴(kuò)張,其中不少人都能在asm.js或者英特爾RiverTrail并行編程模式的輔助下實(shí)現(xiàn)諸多先進(jìn)功能。值得一提的是,他們絕對(duì)不會(huì)受到工具缺乏這類難題的困擾。
當(dāng)然,市場(chǎng)上也存在著JavaScript的替代方案,其中***代表性的就是谷歌Dart——據(jù)說該語言將在不久的將來推出1.0正式版本。不過Dart代碼需要經(jīng)過編譯才能轉(zhuǎn)化為JavaScript,從而運(yùn)行在大部分瀏覽器環(huán)境當(dāng)中。惟一的例外就是谷歌推出的Chromium,它提供Dart虛擬機(jī)、因而能夠直接與這種新語言相對(duì)接。
***的并不一定總能取得勝利。與x86指令集類似,有時(shí)候贏家往往是能夠堅(jiān)持到***的方案。我不知道JavaScript如何通過自身擴(kuò)展來迎合開發(fā)人員創(chuàng)建應(yīng)用程序的需求(例如像微軟Office這樣積淀豐厚的應(yīng)用),但奇怪的是,通過瀏覽器窗口實(shí)現(xiàn)全平臺(tái)運(yùn)行似乎成了未來的必然趨勢(shì)。我個(gè)人可不想刻意跟這種趨勢(shì)進(jìn)行對(duì)抗。
英文原文:http://www.infoworld.com/t/application-development/the-triumph-of-javascript-227283