【編者按】本文作者為資深 Web 開發(fā)者 TJ VanToll, TJ 專注于移動(dòng)端 Web 應(yīng)用及其性能,是《jQuery UI 實(shí)踐》 一書的作者。
本文系 OneAPM 工程師編譯呈現(xiàn),以下為正文的第二部分。點(diǎn)此閱讀第一部分。
本地移動(dòng) apps
在2015年,出現(xiàn)了一種新的基于 JavaScript 的移動(dòng)應(yīng)用開發(fā)類別:JavaScript Native。與基于 Cordova 或 PhoneGap 的應(yīng)用不同,JavaScript 本地應(yīng)用使用平臺(tái)的本地控制與范型建立用戶界面,無(wú)需涉及瀏覽器或 web 視圖。
JavaScript Native 框架試圖提供一種兩全其美的方式建立 iOS 與 Android 應(yīng)用:使用 JavaScript 編寫程序邏輯(而不是 Java,Swift 等),使用平臺(tái)的本地用戶界面 API 建立適應(yīng)原生 OS 的應(yīng)用,從而實(shí)現(xiàn)可能的最佳性能。

使用 JavaScript 打造的移動(dòng) apps 舉例,點(diǎn)此獲得源代碼。
React Native 與 NativeScript是2015年最早公開發(fā)布的兩個(gè) JavaScript Native 框架,后來(lái)者還包括 Fuse 與 tabris.js。自然,不同的框架提供了不同的功能。比如說(shuō),React Native 允許重用 React JavaScript 框架,而 NativeScript 允許直接調(diào)用 iOS 與 Android APIs。但是,他們都具備使用 JavaScript 搭建真正本地 apps 的高級(jí)方法。
盡管使用 JavaScript 建立本地 apps 的想法對(duì) web 開發(fā)者而已相當(dāng)誘人,但與 Cordova 之類的框架相比,JavaScript Native 框架也存在如下的一些缺陷:
由于 JavaScript Native 框架不使用瀏覽器,你必須學(xué)習(xí)用于搭建界面的框架相關(guān)的 APIs,而不是像打造 Cordova 應(yīng)用那樣簡(jiǎn)單地使用 HTML 語(yǔ)言。
由于 JavaScript Native 應(yīng)用是本地應(yīng)用,在建立較為大型的應(yīng)用時(shí),內(nèi)存管理是需要額外考慮的問(wèn)題,這與建立本地 iOS 與 Android 應(yīng)用時(shí)如出一轍。
最后,由于 JavaScript Native 框架非常新興,可參考的案例與教程都很有限。與那些經(jīng)歷多年發(fā)展的框架相比,這些框架還很不成熟。
就這些框架在2016年的發(fā)展,筆者采訪了來(lái)自 React Native 團(tuán)隊(duì)的 Christopher Chedeau (aka Vjeux)以及 NativeScript 的產(chǎn)品經(jīng)理 Valio Stoychev。兩者都不謀而合地關(guān)注于穩(wěn)定性。
“就 React Native 而言,我們已經(jīng)度過(guò)了早期的新鮮階段,現(xiàn)在正進(jìn)入的這個(gè)階段要求我們變得更加牢靠。你可以發(fā)現(xiàn),在性能工具優(yōu)化、核心 APIs 提升,錯(cuò)誤消息優(yōu)化以及邊緣案例修復(fù)方面,我們投入了大量的努力。這樣,F(xiàn)acebook 內(nèi)外的工程師才能隨心所欲地打造更加高質(zhì)量的移動(dòng) apps。“ ——Facebook,Christopher Chedeau (Vjeux)。
”隨著用戶基礎(chǔ)的不斷擴(kuò)張,我們要為用戶確保一個(gè)魯棒的框架,才能在此基礎(chǔ)上打造切實(shí)可行的應(yīng)用。因此,我們打算繼續(xù)在性能及調(diào)試工具方面努力,從而提高 NativeScript 開發(fā)者的體驗(yàn)。此外,另一重心是與 Angular 2 團(tuán)隊(duì)的合作,預(yù)計(jì)將貫穿2016年?!?——Telerik,Valio Stoychev。
JavaScript Native 2016年展望
對(duì) JavaScript Native 平臺(tái)而言,2016年的重點(diǎn)是提升穩(wěn)定性與采納率。隨著 React Native 與 NativeScript 等框架不斷鞏固其功能集,預(yù)計(jì)圍繞這些框架的工具也會(huì)越來(lái)越多,比如 Telerik 用于搭建 NativeScript 應(yīng)用的 Telerik Platform。
當(dāng)然,時(shí)間會(huì)告訴我們,2015年 JavaScript Native 應(yīng)用的大熱能否在2016年轉(zhuǎn)化為大規(guī)模的使用。但是,使用這些框架成功打造的大量高質(zhì)量應(yīng)用(查看 React Native 案例展示及 NativeScript 案例展示)似乎在暗示,用 JavaScript Native 方法打造應(yīng)用的模式將會(huì)流行很長(zhǎng)一段時(shí)間。
對(duì)需要結(jié)合本地 UIs 與本地應(yīng)用的公司而言,JavaScript Native 框架相比于使用 Xcode 與 Objective-C/Swift 打造 iOS 應(yīng)用以及使用 Android Studio 與 Java 打造 Android 應(yīng)用,提供了更加強(qiáng)有力的選項(xiàng),尤其是考慮到多數(shù)公司的開發(fā)者都具備一定 JavaScript 開發(fā)能力。
總而言之,JavaScript Native 應(yīng)用對(duì) JavaScript 開發(fā)者而言是令人激動(dòng)的全新戰(zhàn)場(chǎng)。JavaScript 開發(fā)者不再需要學(xué)習(xí)本地編程語(yǔ)言就可以編寫本地移動(dòng)應(yīng)用。然而,本地移動(dòng)應(yīng)用并不是 JavaScript 滲入的唯一領(lǐng)域——在傳統(tǒng)的桌面應(yīng)用領(lǐng)域,JavaScript 也有涉足。
Desktop 應(yīng)用
習(xí)慣上,如果想搭建一個(gè) Windows 或 Mac 應(yīng)用,你會(huì)使用 WPF 與 Windows Forms 之類的平臺(tái)特定工具或 Java、Adobe Air 之類的跨平臺(tái)接口。但是,與本文中討論的其他軟件生態(tài)系統(tǒng)一樣,基于 JavaScript 的解決方案正慢慢地侵入這一版圖。
該領(lǐng)域內(nèi)首個(gè)基于 JavaScript 的解決方案是 Node-WebKit,由 Intel 創(chuàng)建并于2011年底實(shí)現(xiàn)開源。Node-WebKit 現(xiàn)在又稱為 NW.js,因?yàn)樗呀?jīng)從 WebKit 切換為 Chromium。NW.js 的實(shí)現(xiàn)方式與 Cordova 有些類似,只不過(guò)它針對(duì)的是桌面應(yīng)用。

NW.js 最早由 Intel 開發(fā),于2011年公開發(fā)布。
NW.js 會(huì)將 web 應(yīng)用打包至本地 shell,同時(shí)提供訪問(wèn)本地桌面 APIs,諸如文件選擇器、窗口菜單等功能。這種組合允許你使用基于統(tǒng)一標(biāo)準(zhǔn)的 web 技術(shù)打造 Windows,OS X 以及 Linux 桌面應(yīng)用。
如果快進(jìn)一兩年,你會(huì)發(fā)現(xiàn) NW.js 并非使用這種基礎(chǔ)架構(gòu)的唯一框架。2015年4月,GitHub 宣布推出 Electron,一款相似的用于創(chuàng)建跨平臺(tái)應(yīng)用的框架。

GitHub 于 2015年4月宣布推出 Electron
Electron 最早作為 Atom(GitHub 的 web 端文本編輯器)的 shell 開發(fā)出來(lái),之后經(jīng)過(guò)拆分更易于在其他項(xiàng)目中使用。因?yàn)?GitHub 的支持,Electron 的流行度突飛猛進(jìn),現(xiàn)在在 GitHub 上有超過(guò)2萬(wàn)顆星(很快趕上 NW.js 的2.5萬(wàn)顆星)。
2015年,作為 Microsoft 全新跨平臺(tái) Visual Studio Code IDE 背后的引擎,Electron 再次登上頭條。此外,瀏覽一下社群創(chuàng)造的 Electron 資源列表,就會(huì)了解 Electron 在開發(fā)社群是多么受歡迎。
桌面應(yīng)用 2016年展望
與本文討論過(guò)的許多技術(shù)相似,用于搭建桌面應(yīng)用的這些跨平臺(tái) JavaScript 工具的未來(lái)似乎前途無(wú)量。有了 GitHub、Microsoft 甚至 Slack 這些先例——Slack 其實(shí)并非基于 NW.js 或 Electron 搭建,但是也使用了 web 技術(shù)創(chuàng)建本地應(yīng)用——其他公司可以信心滿滿地使用 web 技術(shù)搭建桌面應(yīng)用。預(yù)計(jì),在2016年,NW.js、Electron 之類的項(xiàng)目將會(huì)創(chuàng)建出更多的桌面應(yīng)用。
2016年 JavaScript 的新領(lǐng)域
盡管本文討論的話題似乎有些分散——服務(wù)器端代碼、移動(dòng) apps 以及桌面應(yīng)用,敘述的主體卻是基本一致的:短短幾年時(shí)間里,在這些環(huán)境中運(yùn)行 JavaScript 從不可想象演進(jìn)為大勢(shì)所趨。在不到十年時(shí)間里,JavaScript 從用于處理圖片翻轉(zhuǎn)的小兒科語(yǔ)言,進(jìn)化為可能是世界上最流行的編程語(yǔ)言。JavaScript 的未來(lái),似乎無(wú)可限量。
2007年,Jeff Atwood 發(fā)出豪言:”任何能用 JavaScript 編寫的應(yīng)用,最終都會(huì)由 JavaScript 寫就?!斑@句話簡(jiǎn)直如先知一般準(zhǔn)確。事實(shí)上,JavaScript 已經(jīng)延伸到許多本文未曾涉及的領(lǐng)域,例如通過(guò) Johnny-Five 這類項(xiàng)目運(yùn)行在硬件,甚至在蘋果最近宣布的用于 Apple TVs 的 tvOS 中成為創(chuàng)建本地應(yīng)用的一等公民。
促使 JavaScript 不斷成長(zhǎng)的一大原因,是人們對(duì)使用單一開發(fā)模型打造多種范型軟件的渴望。大多數(shù)公司,尤其是小公司,都無(wú)法雇傭足夠數(shù)量的開發(fā)者,以滿足人們當(dāng)前使用的不計(jì)其數(shù)的操作系統(tǒng)與設(shè)備類型的需求。甚至在 Facebook 這種規(guī)模的公司,這也是一大問(wèn)題,正如 Christopher Chedeau 所說(shuō):
”在我眼中,開發(fā)者世界的一大悲哀是社群依據(jù)語(yǔ)言(甚至是生態(tài)系統(tǒng))進(jìn)行劃分。 JavaScript、Java、Objective-C、Python 以及 C++ 等。實(shí)際上,這導(dǎo)致了資源的巨大浪費(fèi),因?yàn)獒槍?duì)每個(gè)生態(tài)系統(tǒng),都要開發(fā)類似的一套工具,諸如包管理器,IDE,核心函數(shù)庫(kù),知識(shí)庫(kù)等。
舉個(gè)具體的例子吧,在 Facebook,每個(gè)功能我們都必須實(shí)現(xiàn)三次:Web 版,iOS 版以及 Android 版。更糟的是,由于一個(gè)工程師往往難于同時(shí)掌握這些生態(tài)系統(tǒng),我們通常需要三個(gè)人來(lái)實(shí)現(xiàn)一個(gè)功能。這真是悲哀。
為了解決該問(wèn)題,我首先想到的是,我們需要一種單一的語(yǔ)言或生態(tài)系統(tǒng)。有了 React Native,我們更趨向于 JavaScript 語(yǔ)言,但從宏觀的角度看,哪一種語(yǔ)言并不重要。重要的是,只保留一種語(yǔ)言。“ —— Facebook,Christopher Chedeau。
隨著 JavaScript 迅速地在移動(dòng)、桌面、服務(wù)器、硬件領(lǐng)域獲得青睞,它已經(jīng)成為唯一可能讓此美好愿景成為現(xiàn)實(shí)的語(yǔ)言。時(shí)間會(huì)告訴我們,JavaScript 的極速增長(zhǎng)能否在2016年持續(xù)下去。不過(guò),JavaScript 工具在軟件生態(tài)系統(tǒng)的快速普及似乎預(yù)示著 JavaScript 無(wú)可限量的未來(lái)。
基于此,筆者將用 Brendan Eich 的名言作為本文的結(jié)尾:“永遠(yuǎn)相信 JS(Always bet on JS)?!?/p>
本文系 OneAPM 工程師編譯呈現(xiàn)。OneAPM Browser Insight 是一個(gè)基于真實(shí)用戶的 Web 前端性能監(jiān)控平臺(tái),能夠幫大家定位網(wǎng)站性能瓶頸,網(wǎng)站加速效果可視化;支持瀏覽器、微信、App 瀏覽 HTML 和 HTML5 頁(yè)面。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
原文地址:http://developer.telerik.com/featured/what-to-expect-from-javascript-in-2016-beyond-the-browser/