使用 electron 引起的思考
零、electron 簡介
- 歷史:Atom 編輯器衍生出的 Atom Shell,後更名為 Electron
- 可以跨 Linux、Mac、Win7-8 平臺開發桌面程式
「寫本文時,electron 版本為 1.6.2,electron 並不支援 win10」 - 使用網頁開發的形式,加速了開發效率,但在效能操作上表現欠佳
「實質上僅用了 Webkit 瀏覽器核心的殼子套了開發者的程式碼,可以直接做瀏覽器用」 - 打包軟體一般 安裝包 40M 起步,軟體體積 100M 起步
一、electron 的佈局
I. 檔案佈局
- 原始碼佈局
app/ // 名稱固定,方便 electron 取檔案
├── package.json // 程式的名稱、簡介、版本等資訊 ,程式的編譯,打包指令碼等
├── main.js // 程式執行唯一入口,可以在 package.json 修改入口檔案
└── index.html // 網頁主頁
- electron 打包後程式的檔案存放
resources/ // 程式根目錄下的檔案
├── app/ // 編寫的原始碼「可選,Mac 中在打包後直接省略了該部分」
└── electron.asar // 原始碼 經過 asar 打包壓縮後生成的 程式需要引用檔案「必須」
II. 執行方式
- 依託 NodeJS 構建的獨立伺服器獲取系統資源
- 以唯一的 main.js 作為主程式,網頁的渲染作為其多個子程式
- 頁面和主執行緒之間的交流:通過 ipcMain「主」 和 ipcRenderer 「頁面」互相廣播交流
- 頁面之間的交流:可以通過在主執行緒廣播轉發給頁面
- 過多使用通過廣播傳送資訊,會導致程式的卡頓
建議使用一個廣播,而用引數作為訊息型別的判斷- 每個視窗都是一個程式,開啟過多的視窗會造成巨大的卡頓
// 減少過多廣播的方法
ipcMain.on(gc.message, function (event, type, ...arg) {
switch (type){
case gc.msgMainLog:
log(...arg);
break;
case gc.msgOpenEffect:
CreateWindow.openEffect(event.sender, ...arg);
break;
case gc.msgAddSequence:
CreateWindow.addSeq(event.sender, ...arg);
break;
case gc.msgAddPlist:
CreateWindow.addPlist(event.sender, ...arg);
break;
}
});
二、electron 的不足
- 效能:canvas 標籤使用 17個左右 就開始記憶體緊張,迴圈利用
- 官網未能提供一個 即可以記錄渲染執行緒,又可以記錄主執行緒的 log
好在 Github 上從不缺少這樣的 東西 - 在搭配使用 React 時,不能在 electron 的 index.html 中直接引用的 CSS 內引用資源,哪怕是相對路徑的連線也不行
解決方法:
- 把 CSS 寫入 React,而不是單獨在 index.html 中引用
- 把 CSS 引用的資源編譯成 base64 寫入到 CSS 檔案中
「不過 引用資源過大會造成 CSS 的載入更慢」
由於 React 在編譯打包的時候,會把 CSS 引用資源的連結轉化為絕對路徑
打包後,程式由於絕對路徑的原因,只能在開發的機子上使用,分發給他人後,會造成資源缺失的問題
相關文章
- 由setContentView()方法引起的思考View
- 一道面試題引起的思考面試題
- 由程式部署所引起的思考薦
- 一次跨域問題引起的思考跨域
- PHP 由 empty 和 isset 面試題引起的思考PHP面試題
- 由“Windows轉向Linux”引起的思考薦WindowsLinux
- [轉帖]一個NAT問題引起的思考
- 使用 electron-builder 打包 Electron 程式UI
- 論一道面試題引起的思考(總結)面試題
- 一次ORA-03113引起的思考
- 對JIT與ERP有效整合所引起的思考
- 對JIT與ERP有效整合所引起的思考(轉)
- Electron使用electron-builder打包時下載electron失敗或慢的解決方案UI
- 服務執行過程中磁碟壞道引起的思考
- C#由變數捕獲引起對閉包的思考C#變數
- 從冴羽的《JavaScript深入之從ECMAScript規範解讀this》引起的思考JavaScript
- C#由轉換二進位制所引起的思考,瞭解下?C#
- 一次排查線上介面偶發異常耗時引起的思考!
- Hive資料匯入HBase引起資料膨脹引發的思考Hive
- vuejs electron webpack整合使用VueJSWeb
- 使用 electron 和 electron-forge 載入 本地磁碟資源 img 的問題
- 一個型別轉換而引起的三級事件的一些思考型別事件
- electron跳坑指南 1(electron的安裝)
- electron 使用 Node.js 原生模組Node.js
- 使用Electron構建跨平臺的桌面應用
- electron的安裝
- 美創科技運維日記|Oracle欄位長度引起的思考length()和lengthb()運維Oracle
- 你不知道的 Electron (二):瞭解 Electron 打包
- Executors使用不當引起的記憶體溢位記憶體溢位
- 使用者下有同名物件引起的問題物件
- 使用者被鎖-中介軟體配置引起的
- 查出引起等待的sql,並kill該引起等待的sqlSQL
- 使用 Macaca 測試 Electron 桌面 AppMacAPP
- 使用 TypeScript 開發 electron入門體驗TypeScript
- 使用 electron-updater 自動更新應用
- pandas使用與思考
- 使用Electron開發一個吸色工具的心路歷程
- 差SQL引起CPU使用率100%的效能分析SQL