-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Electron實戰:入門、進階與性能優化

( 簡體 字)
作者:劉曉倫 著類別:1. -> 程式設計 -> 綜合
譯者:
出版社:機械工業出版社Electron實戰:入門、進階與性能優化 3dWoo書號: 52777
詢問書籍請說出此書號!

缺書
NT售價: 395

出版日:5/1/2020
頁數:257
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111653745
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

我為什么要撰寫本書

我在2015年上半年的時候開始關注NW.js和Electron,下半年開始在實際項目中應用NW.js,那個時候兩個項目的發展勢頭同樣迅猛,分不出孰優孰劣。后來Electron領域出了幾個殺手級應用(Visual Studio Code、Slack等),開發團隊和社區維護者越來越積極地維護此項目,很多開發者在做技術選型的時候就更傾向于使用Electron了。

我也不例外,在公司內部做的項目和我業余時間做的項目,只要涉及桌面GUI,我基本都會選擇Electron。用Electron開發的應用非常穩定,運行效率可媲美原生C/C++應用,且社區資源豐富,即使是一些冷門的需求也能找到解決方案;Electron維護者非常專業、友善,開發者的Issue和Pull Request回復得也非常及時。

但開發者想進入這個領域并開發出一個成熟、穩定的商業應用并沒有那么簡單,這主要是以下幾方面原因導致的。

官方文檔片面:Electron使用JavaScript、HTML和CSS構建跨平臺的桌面應用,但官方文檔涉及的JavaScript、HTML和CSS相關的知識并不多,以介紹Electron自身的API為主,另一個重要成員—Node.js幾乎未涉及。如何把這些知識與Electron的知識結合起來構建應用,成為開發者入門面臨的第一個困難。

學習資料匱乏:目前國內圖書市場中只有兩本由國外引入的與Electron相關的書,其中一本花了一半的篇幅講解NW.js。書中存在無關內容多、關鍵知識點及周邊知識少、與國內開發者實際需求不符、存在過時內容等問題,不利于讀者自學。另外,雖然Electron社區中有相關內容,但內容良莠不齊,不具備系統性學習的條件。這是新手面臨的第二個困難。

Electron本身自由度太高,導致“坑多、坑深”:為了保證開發者的自由度和使用的便捷度,Electron提供了豐富的API,使開發者通過Electron可以輕松開發各領域五花八門的應用,但這也給開發者帶來了諸多隱患,比如,API使用不當可能導致應用程序存在嚴重的安全問題(用戶計算機控制權被竊取)和性能問題(百倍千倍的性能差異)。這是新手面臨的第三個困難,而且可能是他們自己也還不知道的問題。

用對、用好Electron生態內的資源具有相當大的挑戰:在Electron本身迅猛發展的同時,其社區生態也呈爆發式增長,兼之Electron可以復用Web和Node.js

生態內的組件,這使得開發者在組件選型時經常會犯錯。比如,我就不推薦在Electron應用內使用jQuery、axios和electron-vue等組件。這是新手面臨的第四個困難。

以上這些困難也曾使我備受困擾,為讓廣大開發者不再重走我的痛苦之路,我決定撰寫本書。

本書主要內容及特色

1.本書大部分內容是官方文檔中沒有的

在書中我用大量篇幅介紹了ES6、HTML5和CSS3是如何與Electron結合的,比如動畫效果、Web安全、HTML系統通知、WebSocket通信、音視頻設備訪問、CSS擴展語言等。

本書還用很大篇幅介紹了Node.js是如何與Electron結合的,比如:Node.js為何擅長處理IO密集型業務;Node.js是如何使用命名管道進行通信的;Node.js是如何完成加密、解密的(其中包括我為什么不推薦使用網上大量傳播的加密、解密方法)。

本書用了一整章的篇幅介紹現代前端框架如何與Electron整合,其中包括Vue、React、Angular、webpack。

本書介紹了眾多在Electron項目中常用的優秀第三方庫,比如electron-builder(打包發布工具)、Debugtron(生產環境調試工具)、Dexie(IndexedDB封裝庫)、Jimp(圖像處理庫)等。

2.本書以更合理的方式組織內容

我在撰寫本書時始終秉持以漸進的方式傳遞知識的理念。因此,我并沒單獨拿出幾章內容枯燥地介紹ES6、HTML5和CSS3等相關知識,而是把這些知識分散到書中各個章節中,以Electron為主線,由淺入深地傳遞給讀者。

我把分散在各個角落的知識點按應用場景組織在一起,比如kiosk本是Electron窗口類的一個API(用于自助服務機),print是webContents類的API(用于控制打印機),我把它們與HTML5訪問媒體設備的知識、Electron電源控制的知識整合在一起放在“硬件”章節。類似的知識組合在本書中隨處可見。此外對于其他很多官網沒有介紹但對Electron應用很有價值的CSS、JavaScript知識,我都做了較合理的整理和編排。讀者閱讀本書時即能有所體會。

與實戰類的圖書不同,本書不會試圖組織一些實際案例來從頭到尾講它們是如何實現的,而是把實際案例中涉及的問題、難點、易錯點剝離出來,講精講透。本書最后一章安排了一個真實案例,但也只講關鍵環節的內容,不會大量地粘貼與Electron無關的代碼。

那些一看就會、一看就懂的Electron知識我沒有過多講解,但諸如如何在Electron中讀取訪問受限的Cookie、如何保護客戶數據等知識,本書都是用一線案例講解的。

本書并不試圖面面俱到地講解Electron的所有內容,而是只講解項目一線實戰中會涉及的重要內容,比如腳本注入、無邊框窗口等。被官網或社區標記為已過時的接口和插件本書不會講解。在選擇第三方社區插件時,我盡量選擇了更新較頻繁、使用用戶較多的來使用。

3.本書有足夠的知識廣度和知識深度

本書并不是一本專門講解Electron的書,除Electron相關知識外,還介紹了大量的JavaScript、HTML、CSS、Node.js、桌面軟件開發、多進程控制、安全、社區資源及背景故事等知識。Electron是本書的主線,每章知識全部是為Electron服務的,所以說本書的知識有廣度。

本書的知識也有深度。舉個例子,初學者可能苦于渲染進程與主進程通信的難度而大量使用remote技術。但初學者不知道的是,remote技術使用不當可能導致某些關鍵環節有百倍千倍的性能差異,甚至會導致不易排查的錯誤和安全問題的出現。這些問題背后的原理是怎樣的呢?類似這樣有深度的知識,在本書中有很多。

如何閱讀本書

如果把所有技術書的學習難度系數從低到高設為1∼10,那么本書難度系數應該在7左右。書中涉及從桌面軟件開發到前端網頁開發的知識,知識點非常多,雖然不涉及Electron的源碼,但對關鍵點的運行原理都做了介紹。

本書力圖每一章講一個方面的知識,每一小節講一個知識點,每一小節盡量不安排太多內容,讓讀者能更輕松地獲取知識,以提升閱讀體驗。

如果幾個小節的知識間有關聯,我會盡量把基礎的、工具類的知識安排在前面。比如,我會講完主進程與渲染進程之后,馬上講如何引入現代前端框架,因為后面的知識需要用到現代前端框架。

至于廣為人知的HTML5、CSS3和ES6,本書不會展開講解。而一些JavaScript的知識是在ES6之后才被加入標準的,但由于ES6的巨大變革,業內普遍把ES6及以后加入的知識統稱為ES6,本書也遵循這一共識。

書中帶邊框的區域,放置重點內容或擴展閱讀的內容,重點內容前面會標記“重點”二字,擴展閱讀內容前面會標記“擴展”二字,比如:

此處為需要重點注意的內容。

此處為擴展內容。

書中無邊框且有灰色背景的區域放置與內容相關的源代碼、命令行指令或命令行輸出內容,如:

//Hello World

讀者要求

本書假定讀者具備一定的前端知識,讀者應該有使用HTML、CSS、JavaScript開發網頁的經驗,能熟練使用JavaScript操作網頁中的Dom元素;對Node.js有一定的了解,能使用Node.js常用的包管理工具npm或yarn創建項目并給項目添加依賴包;對瀏覽器的工作原理有一定的認識,知道怎么用開發者工具調試前端代碼;了解HTTP協議,知道如何使用AJAX發起HTTP請求。

學習從來不是一件容易的事情,然而是一件能使你快樂的事情。如果你購買了本書,希望它能給你帶來快樂。

在線答疑及勘誤

雖然有多年的JavaScript和Electron項目開發經驗,但我深知這個領域的知識浩渺無邊,自己的技術水平十分有限,故本書中難免會有謬誤,若你發現了不妥之處,希望能與我聯系。

如果讀者對本書的內容有疑問,我會盡可能地給大家提供幫助,請大家加QQ群聯系我:949674481。如果你有關于本書的建議或意見,歡迎發送郵件至yfc@hzbook.com。

特別致謝

這本書要獻給我的愛人,她的支持和鼓勵使我有持續的動力完成本書。

感謝GitHub的Electron開發團隊及其維護者,是他們開發了這個令人興奮的項目,使我們有機會基于Electron開發各種有趣的應用,沒有Electron就沒有這本書。

在我使用Electron開發項目及創作本書的過程中,參考了很多網友發布的技術文章,在此向這些樂于分享的開發者們表示感謝。

感謝本書的編輯楊福川。我和楊老師在十多年前相識,雖天各一方,疏于聯系,但我心底一直知道有這么一位朋友,是他讓我有了寫一本技術書籍的機會。書稿付梓前楊老師及其同事也給予了很多非常專業的指點,感激不盡。

感謝所有幫忙審稿的小伙伴兒,包括但不限于(不分先后)水歌、譚知魏、楚牛香、KiviZhang、克勞德等。
內容簡介:

本書以實戰為導向,講解了如何用Electron結合現代前端技術來開發桌面應用。不僅全面介紹了Electron入門需要掌握的功能和原理,而且還針對Electron開發中的重點和難點進行了重點講解,旨在幫助讀者實現快速進階。作者是Electron領域的早期實踐者,項目經驗非常豐富,本書內容得到了來自阿里等大企業的一線專家的高度評價。

本書遵循漸進式的原則逐步傳遞知識給讀者,書中以Electron知識為主線并對現代前端知識進行了有序的整合,對易發問題從深層原理的角度進行講解,對普適需求以實踐的方式進行講解,同時還介紹了Electron生態內的大量優秀組件和項目。

全書一共14章:

第1章講解Electron因何而來,Electron的生態、優勢和不足,以及Electron未來的競爭者PWA技術;

第2章帶領讀者新建了一個簡單的Electron項目,同時為讀者介紹了一些Electron的基礎知識;

第3章講解了主進程和渲染進程的相關內容;

第4章介紹了如何把現代前端框架引入Electron項目中,集中介紹了webpack、Angular、React和Vue等框架;

第5~13章依次詳細講解了界面、數據持久化、操作系統API訪問、硬件設備訪問、測試、調試、安全、發布等技術及其背后的原理;

第14章通過一個完整的工程項目串聯了Electron的核心技術并展示了Electron項目開發的完整流程。
目錄:

推薦序
前 言
第1章 認識Electron 1
1.1 Electron的由來 1
1.2 基于Electron的應用 4
1.3 Electron的生態 5
1.4 Electron的優勢 5
1.5 Electron的不足 6
1.6 未來的競爭者PWA 7
1.7 本章小結 9
第2章 輕松入門 10
2.1 搭建開發環境 10
2.2 創建窗口界面 13
2.3 啟動窗口 14
2.4 引用JavaScript 16
2.5 Electron API演示工具 19
2.6 試驗工具Electron Fiddle 20
2.7 本章小結 22
第3章 主進程和渲染進程 23
3.1 區分主進程與渲染進程 23
3.2 進程調試 25
3.2.1 調試主進程 25
3.2.2 調試渲染進程 27
3.3 進程互訪 29
3.3.1 渲染進程訪問主進程對象 29
3.3.2 渲染進程訪問主進程類型 30
3.3.3 渲染進程訪問主進程自定義內容 31
3.3.4 主進程訪問渲染進程對象 32
3.4 進程間消息傳遞 32
3.4.1 渲染進程向主進程發送消息 32
3.4.2 主進程向渲染進程發送消息 34
3.4.3 渲染進程之間消息傳遞 36
3.5 remote模塊的局限性 36
3.6 本章小結 38
第4章 引入現代前端框架 39
4.1 引入webpack 39
4.1.1 認識webpack 39
4.1.2 配置webpack 40
4.1.3 主進程入口程序 42
4.1.4 渲染進程入口程序 43
4.1.5 自定義入口頁面 45
4.1.6 使用jQuery 46
4.2 引入Angular 46
4.2.1 認識Angular 46
4.2.2 環境搭建 47
4.2.3 項目結構 48
4.3 引入React 48
4.3.1 認識React 48
4.3.2 環境搭建 49
4.3.3 項目結構 50
4.3.4 項目引薦 50
4.4 引入Vue 50
4.4.1 認識Vue 50
4.4.2 環境搭建 51
4.4.3 項目結構 52
4.4.4 調試配置 53
4.5 本章小結 55
第5章 窗口 56
5.1 窗口的常用屬性及應用場景 56
5.2 窗口標題欄和邊框 58
5.2.1 自定義窗口的標題欄 58
5.2.2 窗口的控制按鈕 62
5.2.3 窗口最大化狀態控制 63
5.2.4 防抖與限流 65
5.2.5 記錄與恢復窗口狀態 67
5.2.6 適時地顯示窗口 68
5.3 不規則窗口 69
5.3.1 創建不規則窗口 69
5.3.2 點擊穿透透明區域 71
5.4 窗口控制 72
5.4.1 阻止窗口關閉 72
5.4.2 多窗口競爭資源 74
5.4.3 模態窗口與父子窗口 75
5.4.4 Mac系統下的關注點 76
5.5 本章小結 78
第6章 界面 79
6.1 頁面內容 79
6.1.1 獲取webContents實例 79
6.1.2 頁面加載事件及觸發順序 81
6.1.3 頁面跳轉事件 82
6.1.4 單頁應用中的頁內跳轉 83
6.1.5 頁面縮放 84
6.1.6 渲染海量數據元素 85
6.2 頁面容器 88
6.2.1 webFrame 88
6.2.2 webview 90
6.2.3 BrowserView 91
6.3 腳本注入 93
6.3.1 通過preload參數注入腳本 93
6.3.2 通過executeJavaScript注入腳本 97
6.3.3 禁用窗口的beforeunload事件 99
6.4 頁面動效 100
6.4.1 使用CSS控制動畫 100
6.4.2 使用JavaScript控制動畫 101
6.5 本章小結 102
第7章 數據 103
7.1 使用本地文件持久化數據 103
7.1.1 用戶數據目錄 103
7.1.2 讀寫本地文件 105
7.1.3 值得推薦的第三方庫 106
7.2 使用瀏覽器技術持久化數據 107
7.2.1 瀏覽器數據存儲技術對比 107
7.2.2 使用第三方庫訪問IndexedDB 108
7.2.3 讀寫受限訪問的Cookie 110
7.2.4 清空瀏覽器緩存 112
7.3 使用SQLite持久化數據 112
7.4 本章小結 115
第8章 系統 116
8.1 系統對話框 116
8.1.1 使用系統文件對話框 116
8.1.2 關于對話框 118
8.2 菜單 119
8.2.1 窗口菜單 119
8.2.2 HTML右鍵菜單 121
8.2.3 系統右鍵菜單 124
8.2.4 自定義系統右鍵菜單 125
8.3 快捷鍵 126
8.3.1 監聽網頁按鍵事件 126
8.3.2 監聽全局按鍵事件 126
8.4 托盤圖標 127
8.4.1 托盤圖標閃爍 127
8.4.2 托盤圖標菜單 128
8.5 剪切板 129
8.5.1 把圖片寫入剪切板 129
8.5.2 讀取并顯示剪切板里的圖片 130
8.6 系統通知 131
8.6.1 使用HTML API發送系統通知 131
8.6.2 主進程內發送系統通知 132
8.7 其他 133
8.7.1 使用系統默認應用打開文件 133
8.7.2 接收拖拽到窗口中的文件 134
8.7.3 使用系統字體 135
8.7.4 最近打開的文件 137
8.8 本章小結 138
第9章 通信 139
9.1 與Web服務器通信 139
9.1.1 禁用同源策略以實現跨域 139
9.1.2 Node.js訪問HTTP服務的不足 141
9.1.3 使用WebSocket通信 142
9.1.4 截獲并修改網絡請求 144
9.2 與系統內其他應用通信 146
9.2.1 Electron應用與其他應用通信 146
9.2.2 網頁與Electron應用通信 148
9.3 自定義協議(protocol) 150
9.4 使用socks5代理 152
9.5 本章小結 153
第10章 硬件 154
10.1 屏幕 154
10.1.1 獲取擴展屏幕 154
10.1.2 在自助服務機中使用Electron 156
10.2 音視頻設備 158
10.2.1 使用攝像頭和麥克風 158
10.2.2 錄屏 159
10.3 電源 160
10.3.1 電源的基本狀態和事件 160
10.3.2 監控系統掛起與鎖屏事件 161
10.3.3 阻止系統鎖屏 162
10.4 打印機 162
10.4.1 控制打印行為 162
10.4.2 導出PDF 164
10.5 硬件信息 165
10.5.1 獲取目標平臺硬件信息 165
10.5.2 使用硬件串號控制應用分發 166
10.6 本章小結 170
第11章 調測 171
11.1 測試 171
11.1.1 單元測試 171
11.1.2 界面測試 174
11.2 調試 177
11.2.1 渲染進程性能問題追蹤 177
11.2.2 自動追蹤性能問題 180
11.2.3 性能優化技巧 182
11.2.4 開發環境調試工具 185
11.2.5 生產環境調試工具 186
11.3 日志 188
11.3.1 業務日志 188
11.3.2 網絡日志 189
11.3.3 崩潰報告 190
11.4 本章小結 193
第12章 安全 194
12.1 保護源碼 195
12.1.1 立即執行函數 195
12.1.2 禁用開發者調試工具 196
12.1.3 源碼壓縮與混淆 198
12.1.4 使用asar保護源碼 201
12.1.5 使用V8字節碼保護源碼 202
12.2 保護客戶 204
12.2.1 禁用Node.js集成 204
12.2.2 啟用同源策略 204
12.2.3 啟用沙箱隔離 205
12.2.4 禁用webview標簽 205
12.3 保護網絡 206
12.3.1 屏蔽虛假證書 206
12.3.2 關于防盜鏈 209
12.4 保護數據 211
12.4.1 使用Node.js加密解密數據 211
12.4.2 保護lowdb數據 213
12.4.3 保護electron-store數據 213
12.4.4 保護用戶界面 214
12.5 提升穩定性 214
12.5.1 捕獲全局異常 214
12.5.2 從異常中恢復 215
12.6 本章小結 216
第13章 發布 218
13.1 生成圖標 218
13.2 生成安裝包 219
13.3 代碼簽名 221
13.4 自動升級 222
13.5 本章小結 224
第14章 實戰:自媒體內容發布工具 225
14.1 項目需求 225
14.2 項目架構 226
14.2.1 數據架構 226
14.2.2 技術架構 228
14.3 核心剖析 229
14.3.1 創建窗口并注入代碼 229
14.3.2 開始同步文章數據 230
14.3.3 檢查是否登錄 232
14.3.4 上傳文章圖片 233
14.3.5 設置文章標題 235
14.3.6 設置文章正文 236
14.3.7 其他工作 236
14.4 輔助功能 237
14.4.1 圖片縮放 237
14.4.2 用戶身份驗證 239
14.5 本章小結 240
附錄A Mac代碼簽名 242
結語 256
序: