Electron (GitHub) 讓你可以用 web 技術構建跨平臺的桌面應用。它有以下特性:html
自動更新react
崩潰報告webpack
Windows 安裝git
調試和分析github
原生菜單和通知web
Electron 最初是被 GitHub 的做者 Atom 建立,如今已被多個公司使用,包括 Microsoft(見下文的 Visual Studio Code),Slack 和 Docker。chrome
Electron 的架構包括 Node.js runtime 和嵌套的微型 Chromium 瀏覽器。Electron 應用在多個進程中運行:主進程運行的是應用的 package.json
聲明的 main
腳本。爲了顯示一個用戶界面,該腳本能夠打開 窗口。這些腳本的每個都運行在獨立的進程中(一個所謂的 渲染進程 ),就像 web 瀏覽器的 tab 標籤。編程
使用 React Native ,你能夠經過 React 來構建 iOS 原生應用和 Android 原生應用。Virtual DOM 保持不變,你仍然可使用 JSX 來建立它,但實際的 UI 是用原生的組件構建,例如 iOS 的 UITabBar 以及 Android 的 Drawer。你能夠經過 Flexbox 來佈局這些原生組件。json
一方面,這意味着在 web、iOS、Android 這些不一樣的平臺上, UI 層會有些不一樣。另外一方面,若是你有這些原平生臺的經驗,你能夠很大程度地重用你的代碼。react-native
一般,我對嘗試將一個平臺的原生語言移植到另外一個平臺是不看好的。但幾個月前, 一個 iOS 開發者評估 React 後說到:
我可能不再會用 Objective-C 或者 Swift 編寫 iOS 應用了。
若是你考慮到他用 React Native 編程以前,還要學習 JavaScript 和 React,會認爲這是很是了不得的。
另外一個 有趣的引述 ,Andy Matuschak(他「在 UIKit 團隊幫助構建 iOS 4.1–8」)說到:
做爲 UIKit 做者的一員,我很自信的說:React 的 UI 層 model 要比 UIKit 的優秀不少。React Native 值得關注。
有些方面,native 應用已遇上了 web(如 deep linking, indexing)。 Progressive web apps 並不真的是一項技術,只是現代 web 應用特色的一個術語。這意味着 web 應用在一些方面正在追趕原生應用,甚至有的方面正走在原生應用的前面:
漸進加強: 應用運行在儘量多的環境中。它會使用任何可用的服務,若是沒有可用的服務則會優雅降級。
響應用戶界面: 應用適應多種輸入方式(觸摸、 語言輸入等)和多種輸出方式(不一樣的屏幕尺寸、震動、音頻、盲文顯示等)。
鏈接性、獨立性:應用可在斷網以及間歇性斷網或低帶寬環境下很好地工做。
類應用 UI:應用採用原平生臺的 UI 元素,包括快速加載用戶界面(能夠經過 service workers 獲取重要的緩存資源)。
持續更新(「時新性」):service worker API 定義一個進程用來將應用自動更新至新版。
安全通訊:應用使用 HTTPS 通訊來提供服務,阻止網絡劫持和攻擊。
應用發現:像 W3C 應用 manifest 元數據能使搜索引擎找到 web 應用。
推送與互動:推送通知的特性,主動讓用戶瞭解最新動態。
可本地安裝:在一些平臺上,你能夠安裝 web 應用使得它看起來像一個本地應用(將 icon 放在主屏,在應用程序切換器單獨列出,chrome 瀏覽器可選)。全部這些應用不用通過本地應用商店。
可鏈接性:經過 URL 能夠輕鬆分享應用,不用安裝便可運行。
我這說起 progressive web apps,是由於我喜歡上述全部的技術和技巧。但我不肯定 「progressive web apps」 與簡單的「現代 web 應用」有多大的區別。有一件事我很反對,就是 給 web 應用安裝時的 banner 提示 (這是它們的殺手級功能,畢竟它們不須要這個功能。)
Visual Studio Code 是一個介於完備的 IDE 和文本編輯器之間的 JavaScript 代碼編輯器。而且它是使用 JavaScript 基於 Electron 編寫的。2015,VSC 成爲 開源 項目並增長了 擴展 (一個經過 plugins 來擴展它的 API)。
Rollup 是一個 模塊打包工具 :它將多個 ES6 模塊轉化爲一個獨立的 打包文件 ,打包後的模塊能夠是 ES六、CommonJS、ES5…… 中的任一種格式。Rollup 爲 JavaScript 模塊帶來了兩大創新:
經過名叫 「tree-shaking」 的技術使打包的結果只包括實際用到的 exports。Three-shaking 的關鍵在於依賴 ES6 模塊的靜態結構。「靜態結構」意味着在編譯時他們是可分解的,而不用執行它們的任何代碼。有了這種死碼刪除是極好的,由於如今咱們能夠根據須要隨意地使模塊或大或小,而不用擔憂打包後的大小。
它證實了 ES6 模塊打包後是一種可用的 ES6 模塊格式。
Web Assembly 是靜態格式語言(源自 asm.js)的一種二進制格式,它可被輸入到(支持它的) JavaScript 引擎來建立快速的可執行文件。這是一種比字節碼要高級一些的語言,所以容易發展它。它運行在和JavaScript相同的語義空間,所以很方便集成它。asm.js 到底有多快?C++ 編譯成 Web Assembly 運行的時間比將 Web Assembly 編譯成原生代碼要快大約 70%。
Web Assembly 最終可能獲得 JavaScript OOP 的支持。到那時,它將真的成爲一個通用的 web 虛擬機。