大概十年前?Palm webOS?發(fā)布的時(shí)候,有一種看法認(rèn)為未來(lái)的移動(dòng)端軟件和桌面軟件將被 Web 取代凫碌。
彼時(shí)?Chromium?未滿周歲快毛,Node.js?在娘胎里即將出世餐弱。 十年間,前者借 Google 之力一統(tǒng)瀏覽器江山姆坚,后者則顛覆了所有前端開(kāi)發(fā)的工程實(shí)踐澳泵。 這兩者的結(jié)合則是一個(gè)劃時(shí)代的跨平臺(tái)的桌面軟件開(kāi)發(fā)新方式 -?Electron。
十年預(yù)言成為現(xiàn)實(shí)兼呵。
我們不討論原生開(kāi)發(fā)烹俗。在足夠的功能支持和優(yōu)越的開(kāi)發(fā)效率面前,大多數(shù)應(yīng)用場(chǎng)景真的沒(méi)必要再討論是否原生開(kāi)發(fā)萍程。
關(guān)于 Electron
Electron?整合了?Node.js?和?Chromium幢妄。 它能夠充分利用?Node.js?豐富的軟件倉(cāng)庫(kù),并使用?Chromium?的渲染引擎部分茫负,同時(shí)保持小巧和可維護(hù)蕉鸳。
Electron 應(yīng)用結(jié)構(gòu)
Electron?程序有兩類(lèi)進(jìn)程。
程序入口是一個(gè)?JavaScript?腳本忍法,稱(chēng)為?主進(jìn)程潮尝。 開(kāi)發(fā)者可以在主進(jìn)程中用腳本創(chuàng)建頁(yè)面展示用戶界面。 用戶界面其實(shí)是使用?HTML/CSS/JavaScript?等標(biāo)準(zhǔn) web 技術(shù)開(kāi)發(fā)的頁(yè)面饿序,運(yùn)行在?渲染進(jìn)程?中勉失,由?Chromium?渲染。
主進(jìn)程能夠調(diào)用所有的系統(tǒng)原生 API原探,而渲染進(jìn)程則只能調(diào)用標(biāo)準(zhǔn)的 Web API乱凿。 (早期版本中渲染進(jìn)程可以直接訪問(wèn)很多系統(tǒng)原生 API顽素,為了安全考慮,新版本默認(rèn)禁止渲染進(jìn)程直接訪問(wèn)系統(tǒng)原生 API)
進(jìn)程間通信
主進(jìn)程與渲染進(jìn)程之間可以通過(guò)?ipcRenderer/ipcMain?發(fā)送消息徒蟆,或者使用?electron.remote?模塊進(jìn)行 IPC 通信胁出。 渲染進(jìn)程之間則可以使用?localStorage/sessionStorage/IndexedDB?等方式共享數(shù)據(jù)。
文件結(jié)構(gòu)
運(yùn)行一個(gè)最基本的?Electron?項(xiàng)目只需要 3 個(gè)文件段审,如下:
其中全蝶,index.js?包含了軟件生命周期的主要邏輯,如窗口管理寺枉,菜單欄管理等抑淫。 我們可以決定采用什么方式來(lái)創(chuàng)建軟件的窗口,如窗口尺寸姥闪、是否全屏始苇、透明度等。
index.html?用于定義窗口范圍內(nèi)的程序界面甘畅。 采用標(biāo)準(zhǔn)的 HTML 技術(shù)埂蕊,可以輕松控制文本、圖片疏唾、按鈕蓄氧、表單的樣式和行為。 也可以在頁(yè)面中引入?JavaScript?和?CSS?文件槐脏,正如在瀏覽器中編程一樣喉童。