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