GitHub 開源跨平臺神器 Electron 實踐

認識 Electron
Electron是由GitHub開發,用HTML、CSS 和 JavaScript來構建跨平臺桌面應用程序的一個開源庫。Electron通過將Chromium和Node.js合併到同一個運行時環境中,並將其打包爲Mac、Windows和Linux系統下的應用。Electron於2013年作爲構建GitHub上可編程的文本編輯器Atom的框架而被開發出來。
這不意味着Electron是綁定了GUI庫的JavaScript。相反,Electron使用Web頁面作爲它的GUI,所以你能把它看作成一個被JavaScript控制的,精簡版的Chromium瀏覽器。
Electron的版本更新很頻繁,基本保持在1周發佈一個小版本,每季度發佈一個大版本。除了穩定版外還有Beta版和Nightly(最新功能試用版),Chromium更新時,Electron也會跟着更新。
爲什麼選擇Electron
如今的桌面應用軟件基本都需要跨平臺運行,類似於MFC、Duilib等技術都無法滿足需求。當今的跨平臺桌面應用軟件開發以使用QT,Electron較多。
QT跨平臺開發
Qt是一個跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制檯工具和服務器。作爲使用C++語言開發的框架,他的優缺點十分明顯。
優點:
運行效率高;
架構健壯,性能強大。
缺點:
開發週期長;
需要開發者具有C++編程能力;
QT是一款收費軟件,如果不想繳費購買License,又想用QT開發商業(閉源)程序,必須遵守LGPL協議,開源使用了LGPL庫的源代碼。
Electron桌面軟件開發
Electron最早用於開發GitHub上的可編程文本編輯器Atom,它是一個藉助Node.js和Chromium, 利用HTML/CSS/JavaScript語言創建桌面應用的框架。與之類似的還有NW.js, 但是NW.js社區發展基本處於停滯狀態,更新也較慢。
優點:
使用JavaScript語言作爲開發語言,方便前端開發者輕鬆開發桌面應用,原C++/Java語言開發者,也可以很快入手開發;
方便調試,提供了瀏覽器的開發者工具,輕鬆斷點調試;
豐富的Web前端UI資源,可以快速製作絢麗的界面;
快速構建,迭代開發。最複雜的底層瀏覽器部分Electron已經幫你搞定,你只需要負責上層界面及業務邏輯的開發。Electron還提供了熱更新功能,只需加載更新模塊,會自動幫你檢查更新並後臺下載;
崩潰日誌報告。輕鬆收集崩潰日誌,定位錯誤代碼;
C++插件擴展;
代碼開源。Electron是GitHub上的開源項目,開發者有疑問可以在GitHub社區(https://github.com/electron/electron)上直接提issue,高級開發者可以修改Electron底層代碼,訂製自己的Elcetron。
缺點:
打包文件太大。Electron畢竟是一個瀏覽器,最小的應用安裝包也要幾十兆大小;
無法代碼加密。和Web開發類似,使用者可以在開發者工具看到應用的客戶端代碼,商業軟件需要代碼加密的可以選擇重要功能在服務端實現,桌面應用請求,或使用Node文件實現;
運行耗資源。瀏覽器通病,Electron應用也是多進程系統,啓動幾個Electron應用還好,如果太多會造成機器卡頓;
不支持XP系統,Node.js並不支持XP系統。
綜上,如果你想快速的開發出炫酷的桌面應用,而又對系統限制不大,建議你選擇Electron,如果你是一個前端開發人員,又想製作桌面應用,建議你選擇Electron。
創建一個簡單的應用
環境安裝
Electron應用本質上是一個Node.js應用程序,需要安裝Node.js,到官網(http://Node.js.cn/download/)安裝即可。安裝完後,在命令行窗口中分別輸入node -v和npm -v來查看Node和NPM的版本。
初始化應用
與Node.js模塊相同,應用的入口爲package.json 文件,該文件可以在一個文件夾下使用npm init命令,按照提示填充各項信息生成。 一個最基本的Electron 應用一般來說會有如下的目錄結構:
在這裏插入圖片描述
main.js是主進程,完成窗口的創建,url或html文件的加載。GitHub上提供了一個簡單的Electron應用https://github.com/electron/electron-quick-start.git,可供學習參考。
使用C++插件擴展功能
對於複雜的業務邏輯,可以開發成C++插件Node,C++插件主要完成一些複雜的邏輯功能,供Electron調用。Electron對於C++生成的Node插件引用功能來自於Node.js,可以使用require() 函數加載到工程中,像普通的模塊一樣使用。JavaScript 與C++ 庫之間接口使用V8引擎,如下圖所示:在這裏插入圖片描述
插件開發環境
C++插件的開發需要安裝node-gyp、Python 2.76,Windows下開發還要安裝Visual Studio。
每個插件都有一個工程文件binging.gyp,配置了源文件、include路徑及鏈接庫,目標文件,使用的編譯器等,格式如下:
C++與JavaScript通過V8交互執行的整體過程如下圖所示:
在這裏插入圖片描述
C++可以使用Napi接口,模塊的加載使用宏NODEAPIMODULE(hello, Init),導出的JavaScript接口在Init中定義,示例如下:
在這裏插入圖片描述
編譯C++插件使用命令如下:在這裏插入圖片描述
生成的C++插件爲node文件,如hello.node 在JavaScript中調用C++插件直接使用require函數,代碼hello.js如下:
在這裏插入圖片描述
JavaScript就可以調用C++的接口了,執行命令node hello.js,輸出"world"。

C++中調用JavaScript傳遞的回調函數需要使用libuv庫,libuv實現了Node.js的事件循環、工作線程、以及平臺所有的的異步操作的C庫。 具體參考示例代碼https://github.com/nodejs/node-addon-examples

Electron打包
Electron應用打包可以使用electron-builder和electron-packager,推薦使用electron-builder,打包命令爲npm run builder,可以使用參數配置生成的安裝包的操作系統。
環信IM桌面端
環信的IM桌面端SDK提供了JavaScript接口,並且使用Electron框架開發的示例Demo,可以讓任何一個前端人員在極短時間內搭建出一款同時在Mac、Windows上運行的即時通訊軟件,擁有單聊、羣聊和聊天室功能,支持文字、表情、圖片、音視頻等消息格式,開發時間短、界面美觀,可以爲開發者提供方便快捷的桌面端即時通訊解決方案。
下載地址:http://www.easemob.com/download/im
集成說明:http://docs-im.easemob.com/im/pc/intro/integration

作者:李小明,現就職於環信,高級軟件開發工程師,負責IM桌面端軟件的研發,以C++、Node.js爲開發語言,從事多年桌面軟件開發經驗,對行業前沿技術永遠不懈追求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章