Web應(yīng)用程序框架:不創(chuàng)新就玩完
譯文Web應(yīng)用程序框架領(lǐng)域涌現(xiàn)出了一股創(chuàng)新熱潮,這可能讓廣大開(kāi)發(fā)人員頗為沮喪,卻又是必不可少的。
JavaScript
現(xiàn)在想跟上JavaScript圈子可是變得越來(lái)越難了。雖然ReactJS前陣子成為報(bào)章頭條新聞,但沒(méi)有哪個(gè)JavaScript框架能夠長(zhǎng)期保持領(lǐng)先的地位。一些人聲稱(chēng)這是件好事,促使相互競(jìng)爭(zhēng)的框架在創(chuàng)新方面勝過(guò)對(duì)方,但過(guò)于迅猛的創(chuàng)新步伐卻讓廣大開(kāi)發(fā)人員無(wú)所適從。
需要具備怎樣的條件才能被公認(rèn)為是長(zhǎng)期的贏家?
誰(shuí)會(huì)贏得Web?
咱們還是打開(kāi)天窗說(shuō)亮話吧:牽涉的面很廣。正如EmberJS負(fù)責(zé)人Tom Dale曾對(duì)我說(shuō)的那樣:
“切記Web這塊蛋糕的一大塊是什么。.NET面向Windows,Cocoa面向iOS/Mac,贏得了Web就是贏得了全世界。”
既然如此,沒(méi)有哪個(gè)框架設(shè)法主導(dǎo)Web多少也就讓人有點(diǎn)奇怪了。反正沒(méi)有哪個(gè)框能長(zhǎng)期成為霸主。
畢竟,雖然新的編程語(yǔ)言來(lái)來(lái)去去,但Java、C++和C#卻長(zhǎng)期屹立不倒,總是處于或靠近編程語(yǔ)言排行榜的首位,網(wǎng)站Redmonk的分析就表明了這一點(diǎn),詳見(jiàn):http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/。
Web應(yīng)用程序框架卻不是如此。
快速瞄一眼谷歌趨勢(shì)(Google Trends,http://www.google.com/trends/explore#q=EmberJS%2C%20BackboneJS%2C%20Sproutcore&cmpt=q&tz=),就會(huì)顯示JavaScript的人氣指數(shù)經(jīng)歷了起伏不定的階段(見(jiàn)圖A)。
圖A:谷歌趨勢(shì)顯示了JavaScript的人氣指數(shù)。
Sproutcore是由Charles Jolley設(shè)想出來(lái)的,由蘋(píng)果以及后來(lái)的Strobe(已被Facebook收購(gòu)) 開(kāi)發(fā)而成。隨著B(niǎo)ackboneJS取代而之――它得到了LinkedIn等公司的鼎力支持,Sproutcore最終悄無(wú)聲息。與此同時(shí),一些Sproutcore開(kāi)發(fā)人員離開(kāi)Strobe另立門(mén)戶,開(kāi)發(fā)了EmberJS,如今它在逐漸取代BackboneJS。
當(dāng)然,如果我們算上AngularJS(谷歌開(kāi)發(fā)的JavaScript語(yǔ)言),一切相比之下都黯然失色,無(wú)論按上網(wǎng)搜索量來(lái)衡量還是按雇主需求量來(lái)衡量,AngularJS都可謂風(fēng)光無(wú)限(見(jiàn)圖B)。
圖B:AngularJS的崛起之路。
這也許很好。AngularJS也許實(shí)際上就是有史以來(lái)的***框架!至少,在下一個(gè)又酷又炫的框架問(wèn)世之前是這樣。
我們能不能讓這個(gè)步伐慢一點(diǎn)?
就拿ReactJS來(lái)說(shuō)吧。由Facebook開(kāi)發(fā)的ReactJS在年初備受媒體關(guān)注,當(dāng)時(shí)宣布支持原生應(yīng)用程序。這意味著,React Native框架讓開(kāi)發(fā)人員能夠使用React和JavaScript,輕輕松松就能構(gòu)建原生應(yīng)用程序。這是個(gè)好概念,即便并非什么新概念。畢竟,多年來(lái),其他框架早就提供了類(lèi)似的功能,這自然引出了下面這個(gè)問(wèn)題:我們果真需要ReactJS嗎?
Netflix認(rèn)為需要它。這個(gè)技術(shù)先鋒在其開(kāi)發(fā)者博客上宣稱(chēng):“我們決定采用React受到了許多因素的影響,尤其是這三大因素:1)啟動(dòng)速度,2)運(yùn)行時(shí)性能,以及3)模塊化。”
Netflix認(rèn)為,ReactJS提供了一種出色的方法,可以減少網(wǎng)絡(luò)請(qǐng)求(縮短了啟動(dòng)時(shí)間),并簡(jiǎn)化用戶界面渲染(提高了運(yùn)行時(shí)性能),另外還有其他優(yōu)點(diǎn)。
也許Netflix是對(duì)的。但是為什么Netflix就不可以用AngularJS、EmberJS或其他框架來(lái)實(shí)現(xiàn)同樣的目的呢?
#p#
不創(chuàng)新就玩完
Brian Leroux是PhoneGap的核心開(kāi)發(fā)人員之一,他認(rèn)為,目前來(lái)自JavaScript框架的創(chuàng)新最終會(huì)“融入到Web平臺(tái)本身”,迫使這些框架不斷創(chuàng)新,才能保持領(lǐng)先地步。隨著互相競(jìng)爭(zhēng)的框架失去了創(chuàng)新的勁頭,市場(chǎng)會(huì)迎來(lái)更好的框架。
據(jù)一些人統(tǒng)計(jì),我們?cè)陂_(kāi)始選定少數(shù)幾種一貫創(chuàng)新的框架。(Instructure博客的一名開(kāi)發(fā)人員認(rèn)為,EmberJS已經(jīng)獲勝,因?yàn)?ldquo;無(wú)論哪個(gè)框架,最終老是被拿來(lái)與Ember比較”。)AngularJS顯然也是個(gè)冠軍爭(zhēng)奪者,也許是最有實(shí)力的冠軍爭(zhēng)奪者。
哪ReactJS呢?
令人沮喪的是,我們?cè)赪eb編程領(lǐng)域還沒(méi)有遇到任何的停滯現(xiàn)象,而這可能完全體現(xiàn)了我們?cè)赪eb方面還剩下多少工作要做。AngularJS最近因在其2.0版本中沒(méi)有提供向后兼容而遭到炮轟,我認(rèn)為這對(duì)創(chuàng)新而言也許是好事。
為什么?因?yàn)椋鳛長(zhǎng)eroux的密友,我們?cè)赪eb創(chuàng)新會(huì)是什么樣、也許應(yīng)該是什么樣方面連皮毛都未觸及。我們?cè)谙氤龈鼉?yōu)秀的Web編程方式之際,就要一路打破陳規(guī)。
但不是每個(gè)人都這么認(rèn)為。EmberJS共同創(chuàng)造者Yehuda Katz就認(rèn)為,“想讓創(chuàng)新步伐慢下來(lái),***的辦法就是迫使每個(gè)人每隔幾年就要重寫(xiě)代碼。”于是EmberJS在竭力確保***程度的后向兼容性。如上所述,AngularJS沒(méi)有這么做,至少到目前為止沒(méi)有這么做。
但這些在我看來(lái)卻是必不可少的“減速帶”。
在可以預(yù)測(cè)的將來(lái),我們應(yīng)該會(huì)看到JavaScript框架不斷完善。有些框架會(huì)消亡,有些會(huì)勝出。但是雖然這可能會(huì)讓開(kāi)發(fā)人員不得勁,但它最終是好事,因?yàn)檫@意味著獲勝的是Web。
http://www.techrepublic.com/article/web-application-frameworks-innovate-or-die/