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