JavaScript并不是世界上最優(yōu)美的編程語(yǔ)言。正因如此,一個(gè)世界級(jí)的專家寫(xiě)了一本關(guān)于這個(gè)語(yǔ)言的“精粹 ”的書(shū)。這本書(shū)的名字是“深度挖掘javascript的亮點(diǎn)”,因?yàn)閮?yōu)秀的東西被埋的相當(dāng)深。即便如此,它還是迅速地稱為世界上最受歡迎的語(yǔ)言之一。這種受歡迎是應(yīng)得的,因?yàn)楸M管這種語(yǔ)言存有缺陷,但是javascript提供給開(kāi)發(fā)者其它語(yǔ)言不能給予的重要的優(yōu)勢(shì)。有一些優(yōu)勢(shì)是在瀏覽器的開(kāi)發(fā)商同意了Javascript(好吧,技術(shù)上的ECMAScript)作為web語(yǔ)言的標(biāo)準(zhǔn)后產(chǎn)生的。其它的是固有的web應(yīng)用編程模型以及更沒(méi)有通過(guò)什么增強(qiáng)改進(jìn)。然而,盡管原生態(tài)的應(yīng)用程序統(tǒng)治了web應(yīng)用在移動(dòng)設(shè)備上的地位,但是JavaScript的優(yōu)勢(shì)正在逐步轉(zhuǎn)向移動(dòng)設(shè)備。最終它會(huì)主宰嗎?
流行然而并不優(yōu)先
最近的TIOBE社區(qū)列表將JavaScript列為在所有編程語(yǔ)言中的第六位并且還在持續(xù)上升。TIOBE方法的排名傾向于支持老舊的,更加成熟的語(yǔ)言,而不太擅長(zhǎng)去追隨潮流。相比之下,Redmonk排名方法將JavaScript放在第一的位置上。Redmonk方法某種程度上會(huì)偏向于有著強(qiáng)大開(kāi)源社區(qū)的語(yǔ)言,但是同時(shí)在實(shí)質(zhì)上會(huì)反映現(xiàn)在的趨勢(shì)和興趣點(diǎn)。我們自己的開(kāi)發(fā)者經(jīng)濟(jì)概覽已經(jīng)表明HTML5/Javascript的聯(lián)合已經(jīng)是移動(dòng)端開(kāi)發(fā)者所采用的第二流行的語(yǔ)言,幾乎55%的人使用。僅僅以微小的優(yōu)勢(shì)輸給57%的人使用java。然而,盡管我們發(fā)現(xiàn)HTML5和Javascript的組合在優(yōu)先選擇的人群上為(19%),在這個(gè)方陣上遠(yuǎn)遠(yuǎn)落后于Java(29%)。這看起來(lái)會(huì)在未來(lái)幾年顯著提高。[你怎么認(rèn)為呢?我們已經(jīng)有了一個(gè)新的調(diào)查,所以看看這個(gè)調(diào)查然后讓我們知道你的看法]
JavaScript在瀏覽器上飛向自由
這并不是一個(gè)標(biāo)準(zhǔn)的“網(wǎng)贏”的說(shuō)法。我并不認(rèn)為瀏覽器或者是基于網(wǎng)絡(luò)視圖的應(yīng)用程序最后會(huì)統(tǒng)治移動(dòng)設(shè)備。即使使用而且增長(zhǎng)但不會(huì)是常態(tài)。如果將來(lái)真的開(kāi)放web標(biāo)準(zhǔn)來(lái)統(tǒng)治移動(dòng)設(shè)備那么他們需要從文檔對(duì)象模型(DOM)開(kāi)始。DOM不是構(gòu)建應(yīng)用程序,而是文檔的基礎(chǔ)。當(dāng)然你可以最初圍繞一個(gè)平臺(tái)設(shè)計(jì)一個(gè)用于文檔的應(yīng)用程序,但是你會(huì)舉步維艱??匆谎郜F(xiàn)在的框架,允許你為移動(dòng)瀏覽器或網(wǎng)絡(luò)視圖設(shè)計(jì)的相當(dāng)高性能的應(yīng)用程序:React.js 、 Famo.us 和lonic。這三者的共同點(diǎn)就是盡可能少用DOM。
是的,有太多的 WebGL(或者說(shuō) HTML5 Canvas 必備),但是這些都是低級(jí)別的 APIs。你所需的是大的、可能是多字節(jié)的、好的框架為開(kāi)發(fā)大多數(shù)應(yīng)用來(lái)創(chuàng)建一個(gè)優(yōu)秀的平臺(tái)。這不太適合 web 應(yīng)用編程模型,其中最新的程序代碼是放在一個(gè)遠(yuǎn)程的服務(wù)器上,尤其不適用在一個(gè)移動(dòng)的環(huán)境中。能在一個(gè)大的好的存儲(chǔ)在本地的WebGL上創(chuàng)建一個(gè)混合型的應(yīng)用是真的,而且只是從遠(yuǎn)程的服務(wù)器上獲取程序特定的代碼。但是為什么要使用瀏覽器呢?為什么不只是 javaScript 能優(yōu)于其他的在硬件圖形加速器(提示:Qt 提供不錯(cuò)的產(chǎn)品)的跨平臺(tái)框架。一個(gè)高級(jí)別的 API 在語(yǔ)言之間的橋接上是不會(huì)有那么多的開(kāi)銷的?;蛟S在涉及訪問(wèn)特定功能的時(shí)候也是欠缺限制。
現(xiàn)在有幾個(gè)符合這一描述的非常有趣的新選擇。 React Native 和 NativeScript.。它們以不同的方式運(yùn)行,但是二者都是用 JavaScript 來(lái)構(gòu)建一個(gè)原生態(tài) UI 的應(yīng)用程序。Appcelerator 的 TiNext 可能也是很有意思的,即使它們多年來(lái)被多次談?wù)搮s不曾公開(kāi)一個(gè)版本,因此讓我們耐心等待并一睹它的風(fēng)采。
JavaScript異常
蘋果已經(jīng)恢復(fù)了JavaScript 在移動(dòng)端的優(yōu)勢(shì)。阻止了大多數(shù)開(kāi)發(fā)人員在移動(dòng)端采用一個(gè)敏捷、web 樣式持續(xù)交付模型的冠一個(gè)關(guān)鍵事情就是 Apple 在代碼下載上的禁令。如果沒(méi)有這種迭代模式的顯著放緩,對(duì)比測(cè)試會(huì)更加困難。這實(shí)際上就意味著開(kāi)發(fā)者,尤其是初學(xué)者,會(huì)學(xué)的慢些。直到最近,唯一獲取更快的迭代的方式就是首先從 Android 開(kāi)始,開(kāi)發(fā)一個(gè)混合的應(yīng)用程序,因?yàn)?Apple 使得JavaScript 稱為在 webview 代碼下載規(guī)則中的一個(gè)異常。在第一種情況下,它意味著大多數(shù)早期的采納者正在遠(yuǎn)離這個(gè)平臺(tái)。不幸的是第二種情況下 UX 的取舍實(shí)在是太大了,大多數(shù)開(kāi)發(fā)者因?yàn)橛脩粲贸绦蚬收匣蛘咔袚Q到本地去走那條路線。但是在 ios7 中為運(yùn)行 JavaScript 增加了 JavaScriptCore 接口,而且最新的 ios 開(kāi)發(fā)者程序許可證條款中,他們修改了代碼下載異常的規(guī)則包括 JavaScriptCore。
這從安全的角度上講是有道理的。Apple 能審計(jì)和更新他們的運(yùn)行時(shí)間,然而如果他們?cè)试S地第三方運(yùn)行時(shí)下載代碼,他們就沒(méi)有有效地監(jiān)控安全問(wèn)題。因?yàn)?JavaScript 是 Apple 的唯一腳本選項(xiàng)并且他們不允許下載代碼到本地,JavaScript 在恢復(fù)特權(quán)地位--作為那些想快速迭代的唯一選擇。JavaScript 的可用性引發(fā)了一些努力,像 React 和 NativeScript 和 Apple 對(duì)代碼下載政策的放寬把握已經(jīng)完美地對(duì)外公布。
開(kāi)放會(huì)贏嗎?
Web 提倡者有時(shí)候表明基于 web 的開(kāi)放標(biāo)準(zhǔn)最終會(huì)勝利,因?yàn)殚_(kāi)放一直都會(huì)贏。然而,Linux 就是一個(gè)明顯的例子,這是一個(gè)開(kāi)放的迅速發(fā)展的卻沒(méi)有委員會(huì)統(tǒng)一標(biāo)準(zhǔn)的生態(tài)系統(tǒng)。React,F(xiàn)acebook 似乎成了開(kāi)源項(xiàng)目中快速構(gòu)建的一個(gè)開(kāi)發(fā)者生態(tài)系統(tǒng)。已經(jīng)有了一個(gè)圍繞 React.js 快速成長(zhǎng)的委員會(huì),這明顯給他們帶來(lái)了領(lǐng)先的機(jī)會(huì)。但是在 Telerik 的 NativeScript 團(tuán)隊(duì)正與 Google 共同工作,因此Angualr2.0 需要被無(wú)縫集成。Google 打算支持非 DOM 的環(huán)境,不管 web 標(biāo)準(zhǔn)是否朝向它。微軟和谷歌可能需要一段很長(zhǎng)的時(shí)間來(lái)支持他們?cè)谖磥?lái)瀏覽器將實(shí)施的的標(biāo)準(zhǔn)。但是他們?cè)诠餐?TypeScript 努力,使構(gòu)建一個(gè)負(fù)復(fù)雜一點(diǎn)的帶有 JavaScript (證明是編譯器在發(fā)現(xiàn)類型不匹配上比人聰明)應(yīng)用程序更加簡(jiǎn)單。
Apple 已經(jīng)為他們的新 Swift 語(yǔ)言建立了許多相當(dāng)令人印象深刻的工具,尤其是互動(dòng)場(chǎng)景(interactive playground)。然而,F(xiàn)acebook 在 React Native 上依據(jù)即刻反饋和高頻即時(shí)編碼可能已經(jīng)有了更好的編碼體驗(yàn)。蘋果將會(huì)繼續(xù)迭代他們的工具,開(kāi)發(fā)者社區(qū)現(xiàn)在已經(jīng)增加了這些新的 JavaScript 環(huán)境工具。Android 可能技術(shù)上是開(kāi)源的,但是它在社區(qū)建設(shè)上卻不是開(kāi)放的。谷歌正在獨(dú)自增強(qiáng) Android 的平臺(tái)和工具。大概真的是開(kāi)放的開(kāi)發(fā)者社區(qū)才會(huì)勝利,而真正基于社區(qū)的開(kāi)源能夠比基于開(kāi)源標(biāo)準(zhǔn)的開(kāi)放迭代更快。為此,“本地的 UX 使用 JavaScript 去建立”環(huán)境并取得成功,這樣的平臺(tái)肯定不會(huì)失敗。應(yīng)用還是會(huì)依據(jù)平臺(tái)的外觀和感覺(jué),并采用新的特定平臺(tái)的 API 去建立。
這個(gè)時(shí)候,看起來(lái)好像非常開(kāi)放的JavaScript開(kāi)發(fā)者社區(qū)將要贏得勝利了,因?yàn)樗麄冎谱鞯腁PP具有本地平臺(tái)的的外觀,感覺(jué)和性能,除了需要有Web開(kāi)發(fā)的經(jīng)驗(yàn)。封閉平臺(tái)以往一直取勝是因?yàn)槟菚r(shí)候的APP需要為他們封閉的生態(tài)系統(tǒng)定制。目前,開(kāi)放的web標(biāo)準(zhǔn)還是輸?shù)?。如果手機(jī)瀏覽器廠商能同意新標(biāo)準(zhǔn),讓他們制作的應(yīng)用能具有本地應(yīng)用那樣的體驗(yàn),那么他們就一定會(huì)取得勝利。
你是用什么來(lái)制作的?
你認(rèn)為JavaScript將會(huì)掌控移動(dòng)開(kāi)發(fā)的未來(lái)嗎?還是Java,Objective-C和Swift繼續(xù)它們的領(lǐng)導(dǎo)地位? 那物聯(lián)網(wǎng),它的后端會(huì)通過(guò)Node.js嗎?通過(guò)調(diào)查,讓我們知道你用什么來(lái)建立你的APP吧。