
盡管使用 javascript 建立本地 apps 的想法對 web 開發者而已相當誘人,但與 cordova 之類的架構相比,javascript native 架構也存在如下的一些缺陷:
由于 javascript native 架構不使用浏覽器,你必須學習用于搭建界面的架構相關的 apis,而不是像打造 cordova 應用那樣簡單地使用 html 語言。
由于 javascript native 應用是本地應用,在建立較為大型的應用時,記憶體管理是需要額外考慮的問題,這與建立本地 ios 與 android 應用時如出一轍。
最後,由于 javascript native 架構非常新興,可參考的案例與教程都很有限。與那些經曆多年發展的架構相比,這些架構還很不成熟。
“就 react native 而言,我們已經度過了早期的新鮮階段,現在正進入的這個階段要求我們變得更加牢靠。你可以發現,在性能工具優化、核心 apis 提升,錯誤消息優化以及邊緣案例修複方面,我們投入了大量的努力。這樣,facebook 内外的工程師才能随心所欲地打造更加高品質的移動 apps。“ ——facebook,christopher chedeau (vjeux)。 ”随着使用者基礎的不斷擴張,我們要為使用者確定一個魯棒的架構,才能在此基礎上打造切實可行的應用。是以,我們打算繼續在性能及調試工具方面努力,進而提高 nativescript 開發者的體驗。此外,另一重心是與 angular 2 團隊的合作,預計将貫穿2016年。” ——telerik,valio stoychev。
對需要結合本地 uis 與本地應用的公司而言,javascript native 架構相比于使用 xcode 與 objective-c/swift 打造 ios 應用以及使用 android studio 與 java 打造 android 應用,提供了更加強有力的選項,尤其是考慮到多數公司的開發者都具備一定 javascript 開發能力。
總而言之,javascript native 應用對 javascript 開發者而言是令人激動的全新戰場。javascript 開發者不再需要學習本地程式設計語言就可以編寫本地移動應用。然而,本地移動應用并不是 javascript 滲入的唯一領域——在傳統的桌面應用領域,javascript 也有涉足。
習慣上,如果想搭建一個 windows 或 mac 應用,你會使用 wpf 與 windows forms 之類的平台特定工具或 java、adobe air 之類的跨平台接口。但是,與本文中讨論的其他軟體生态系統一樣,基于 javascript 的解決方案正慢慢地侵入這一版圖。
nw.js 最早由 intel 開發,于2011年公開釋出。
nw.js 會将 web 應用打包至本地 shell,同時提供通路本地桌面 apis,諸如檔案選擇器、視窗菜單等功能。這種組合允許你使用基于統一标準的 web 技術打造 windows,os x 以及 linux 桌面應用。
github 于 2015年4月宣布推出 electron
與本文讨論過的許多技術相似,用于搭建桌面應用的這些跨平台 javascript 工具的未來似乎前途無量。有了 github、microsoft 甚至 slack 這些先例——slack 其實并非基于 nw.js 或 electron 搭建,但是也使用了 web 技術建立本地應用——其他公司可以信心滿滿地使用 web 技術搭建桌面應用。預計,在2016年,nw.js、electron 之類的項目将會建立出更多的桌面應用。
盡管本文讨論的話題似乎有些分散——伺服器端代碼、移動 apps 以及桌面應用,叙述的主體卻是基本一緻的:短短幾年時間裡,在這些環境中運作 javascript 從不可想象演進為大勢所趨。在不到十年時間裡,javascript 從用于處理圖檔翻轉的小兒科語言,進化為可能是世界上最流行的程式設計語言。javascript 的未來,似乎無可限量。
促使 javascript 不斷成長的一大原因,是人們對使用單一開發模型打造多種範型軟體的渴望。大多數公司,尤其是小公司,都無法雇傭足夠數量的開發者,以滿足人們目前使用的不計其數的作業系統與裝置類型的需求。甚至在 facebook 這種規模的公司,這也是一大問題,正如 christopher chedeau 所說:
”在我眼中,開發者世界的一大悲哀是社群依據語言(甚至是生态系統)進行劃分。 javascript、java、objective-c、python 以及 c++ 等。實際上,這導緻了資源的巨大浪費,因為針對每個生态系統,都要開發類似的一套工具,諸如包管理器,ide,核心函數庫,知識庫等。 舉個具體的例子吧,在 facebook,每個功能我們都必須實作三次:web 版,ios 版以及 android 版。更糟的是,由于一個工程師往往難于同時掌握這些生态系統,我們通常需要三個人來實作一個功能。這真是悲哀。 為了解決該問題,我首先想到的是,我們需要一種單一的語言或生态系統。有了 react native,我們更趨向于 javascript 語言,但從宏觀的角度看,哪一種語言并不重要。重要的是,隻保留一種語言。“ —— facebook,christopher chedeau。
随着 javascript 迅速地在移動、桌面、伺服器、硬體領域獲得青睐,它已經成為唯一可能讓此美好願景成為現實的語言。時間會告訴我們,javascript 的極速增長能否在2016年持續下去。不過,javascript 工具在軟體生态系統的快速普及似乎預示着 javascript 無可限量的未來。