為什麼 JavaScript 會在移動端中勝出?
JavaScript並不是世界上最優美的程式語言。正因如此,一個世界級的專家寫了一本關於這個語言的“精粹 ”的書。這本書的名字是“深度挖掘javascript的亮點”,因為優秀的東西被埋的相當深。即便如此,它還是迅速地稱為世界上最受歡迎的語言之一。這種受歡迎是應得的,因為儘管這種語言存有缺陷,但是javascript提供給開發者其它語言不能給予的重要的優勢。有一些優勢是在瀏覽器的開發商同意了Javascript(好吧,技術上的ECMAScript)作為web語言的標準後產生的。其它的是固有的web應用程式設計模型以及更沒有通過什麼增強改進。然而,儘管原生態的應用程式統治了web應用在移動裝置上的地位,但是JavaScript的優勢正在逐步轉向移動裝置。最終它會主宰嗎?
流行然而並不優先
- 最近的TIOBE社群列表將JavaScript列為在所有程式語言中的第六位並且還在持續上升。TIOBE方法的排名傾向於支援老舊的,更加成熟的語言,而不太擅長去追隨潮流。相比之下,Redmonk排名方法將JavaScript放在第一的位置上。Redmonk方法某種程度上會偏向於有著強大開源社群的語言,但是同時在實質上會反映現在的趨勢和興趣點。我們自己的開發者經濟概覽已經表明HTML5/Javascript的聯合已經是移動端開發者所採用的第二流行的語言,幾乎55%的人使用。僅僅以微小的優勢輸給57%的人使用java。然而,儘管我們發現HTML5和Javascript的組合在優先選擇的人群上為(19%),在這個方陣上遠遠落後於Java(29%)。這看起來會在未來幾年顯著提高。[你怎麼認為呢?我們已經有了一個新的調查,所以看看這個調查然後讓我們知道你的看法]
JavaScript在瀏覽器上飛向自由
這並不是一個標準的“網贏”的說法。我並不認為瀏覽器或者是基於網路檢視的應用程式最後會統治移動裝置。即使使用而且增長但不會是常態。如果將來真的開放web標準來統治移動裝置那麼他們需要從文件物件模型(DOM)開始。DOM不是構建應用程式,而是文件的基礎。當然你可以最初圍繞一個平臺設計一個用於文件的應用程式,但是你會舉步維艱。看一眼現在的框架,允許你為移動瀏覽器或網路檢視設計的相當高效能的應用程式:React.js 、 Famo.us 和lonic。這三者的共同點就是儘可能少用DOM。
是的,有太多的 WebGL(或者說 HTML5 Canvas 必備),但是這些都是低階別的 APIs。你所需的是大的、可能是多位元組的、好的框架為開發大多數應用來建立一個優秀的平臺。這不太適合 web 應用程式設計模型,其中最新的程式程式碼是放在一個遠端的伺服器上,尤其不適用在一個移動的環境中。能在一個大的好的儲存在本地的WebGL上建立一個混合型的應用是真的,而且只是從遠端的伺服器上獲取程式特定的程式碼。但是為什麼要使用瀏覽器呢?為什麼不只是 javaScript 能優於其他的在硬體圖形加速器(提示:Qt 提供不錯的產品)的跨平臺框架。一個高階別的 API 在語言之間的橋接上是不會有那麼多的開銷的。或許在涉及訪問特定功能的時候也是欠缺限制。
現在有幾個符合這一描述的非常有趣的新選擇。 React Native 和 NativeScript.。它們以不同的方式執行,但是二者都是用 JavaScript 來構建一個原生態 UI 的應用程式。Appcelerator 的 TiNext 可能也是很有意思的,即使它們多年來被多次談論卻不曾公開一個版本,因此讓我們耐心等待並一睹它的風采。
JavaScript異常
蘋果已經恢復了JavaScript 在移動端的優勢。阻止了大多數開發人員在移動端採用一個敏捷、web 樣式持續交付模型的冠一個關鍵事情就是 Apple 在程式碼下載上的禁令。如果沒有這種迭代模式的顯著放緩,對比測試會更加困難。這實際上就意味著開發者,尤其是初學者,會學的慢些。直到最近,唯一獲取更快的迭代的方式就是首先從 Android 開始,開發一個混合的應用程式,因為 Apple 使得JavaScript 稱為在 webview 程式碼下載規則中的一個異常。在第一種情況下,它意味著大多數早期的採納者正在遠離這個平臺。不幸的是第二種情況下 UX 的取捨實在是太大了,大多數開發者因為使用者用程式故障或者切換到本地去走那條路線。但是在 ios7 中為執行 JavaScript 增加了 JavaScriptCore 介面,而且最新的 ios 開發者程式許可證條款中,他們修改了程式碼下載異常的規則包括 JavaScriptCore。
這從安全的角度上講是有道理的。Apple 能審計和更新他們的執行時間,然而如果他們允許地第三方執行時下載程式碼,他們就沒有有效地監控安全問題。因為 JavaScript 是 Apple 的唯一指令碼選項並且他們不允許下載程式碼到本地,JavaScript 在恢復特權地位–作為那些想快速迭代的唯一選擇。JavaScript 的可用性引發了一些努力,像 React 和 NativeScript 和 Apple 對程式碼下載政策的放寬把握已經完美地對外公佈。
開放會贏嗎?
Web 提倡者有時候表明基於 web 的開放標準最終會勝利,因為開放一直都會贏。然而,Linux 就是一個明顯的例子,這是一個開放的迅速發展的卻沒有委員會統一標準的生態系統。React,Facebook 似乎成了開源專案中快速構建的一個開發者生態系統。已經有了一個圍繞 React.js 快速成長的委員會,這明顯給他們帶來了領先的機會。但是在 Telerik 的 NativeScript 團隊正與 Google 共同工作,因此Angualr2.0 需要被無縫整合。Google 打算支援非 DOM 的環境,不管 web 標準是否朝向它。微軟和谷歌可能需要一段很長的時間來支援他們在未來瀏覽器將實施的的標準。但是他們在共同朝著 TypeScript 努力,使構建一個負複雜一點的帶有 JavaScript (證明是編譯器在發現型別不匹配上比人聰明)應用程式更加簡單。
Apple 已經為他們的新 Swift 語言建立了許多相當令人印象深刻的工具,尤其是互動場景(interactive playground)。然而,Facebook 在 React Native 上依據即刻反饋和高頻即時編碼可能已經有了更好的編碼體驗。蘋果將會繼續迭代他們的工具,開發者社群現在已經增加了這些新的 JavaScript 環境工具。Android 可能技術上是開源的,但是它在社群建設上卻不是開放的。谷歌正在獨自增強 Android 的平臺和工具。大概真的是開放的開發者社群才會勝利,而真正基於社群的開源能夠比基於開源標準的開放迭代更快。為此,“本地的 UX 使用 JavaScript 去建立”環境並取得成功,這樣的平臺肯定不會失敗。應用還是會依據平臺的外觀和感覺,並採用新的特定平臺的 API 去建立。
這個時候,看起來好像非常開放的JavaScript開發者社群將要贏得勝利了,因為他們製作的APP具有本地平臺的的外觀,感覺和效能,除了需要有Web開發的經驗。封閉平臺以往一直取勝是因為那時候的APP需要為他們封閉的生態系統定製。目前,開放的web標準還是輸的。如果手機瀏覽器廠商能同意新標準,讓他們製作的應用能具有本地應用那樣的體驗,那麼他們就一定會取得勝利。
你是用什麼來製作的?
- 你認為JavaScript將會掌控移動開發的未來嗎?還是Java,Objective-C和Swift繼續它們的領導地位? 那物聯網,它的後端會通過Node.js嗎?通過調查,讓我們知道你用什麼來建立你的APP吧。
[原文連結](http://www.codeceo.com/article/javascript-in-mobile.html#0-tsina-1-27447-397232819ff9a47a7b7e80a40613cfe1 )
相關文章
- 在 JavaScript 中,什麼時候使用 Map 或勝過 ObjectJavaScriptObject
- 為什麼Javascript在求職中不受歡迎JavaScript求職
- [譯] JavaScript 中為什麼會有 Symbol 型別?JavaScriptSymbol型別
- 為什麼Linux會在桌面端完敗給Windows?LinuxWindows
- 為什麼移動端跨平臺開發不靠譜?
- 為什麼 JavaScript 會無處不在?JavaScript
- 在JavaScript中this到底指代什麼?JavaScript
- JavaScript 為什麼能活到現在?JavaScript
- 為什麼CDN對移動客戶端加速“沒有”效果客戶端
- Qmail日誌中為什麼會出現"CNAMElookupfailedtemporarily"(轉)AI
- JavaScript 加減危機 —— 為什麼會出現這樣的結果?JavaScript
- 為什麼移動Web應用程式很慢Web
- 在.net中為什麼第一次執行會慢?
- 為什麼說JavaScript中的DOM操作很慢JavaScript
- 為什麼說 LINQ 要勝過 SQLSQL
- Google 工程師:為什麼 CDN 對移動客戶端加速“沒有”效果Go工程師客戶端
- 為什麼移動Web應用程式很慢(譯)Web
- Sterne Agee:為什麼中國移動要和蘋果合作蘋果
- 遠端協同辦公平臺哪家勝出機會大?
- 管理者為什麼會在計劃工作中失敗? (轉)
- SQL語句為什麼不會共享(中)SQL
- 為什麼Java後端在創業企業中並不流行? -redditJava後端創業
- 為什麼 JavaScript 中 0.1+0.2 不等於 0.3 ?JavaScript
- 為什麼"JavaScript"名稱中包含"Java"單詞?JavaScript
- 為什麼說移動端網路影片直播系統逐漸成為了一種主流方式
- 為什麼在js中需要新增addEventListener()?JSdev
- 系統為什麼會在執行時當機
- 為什麼移動辦公APP火不起來APP
- 我選單為什麼跟著滑動了?!!—— 固定定位為什麼會失效?
- 為什麼在遊戲中製造幽默這麼難?遊戲
- 中國的華為為什麼要去德國辦釋出會?
- GreatSQL 中為什麼 Update 不會被鎖等待SQL
- [譯]在 JavaScript 中 為什麼你應當使用 map 和 filter 來替代 forEachJavaScriptFilter
- 為什麼後端使用Java在創業企業中並不流行? -reddit後端Java創業
- 在JavaScript中什麼時候使用==是正確的?JavaScript
- 為什麼Linux的htop命令完勝top命令Linux
- javascript中在連結串列中向前(向後)移動n個節點JavaScript
- C#中為什麼會出現空靜態構造方法的寫法C#構造方法