首页>参考读物>计算机科学与技术>软件与程序设计

深入浅出Electron:原理、工程与实践
作者 : 刘晓伦 著
丛书名 : Web开发技术丛书
出版日期 : 2021-12-06
ISBN : 978-7-111-69609-4
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 315
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本能帮助读者夯实Electron基础进而开发出稳定、健壮的Electron应用的著作。
书中对Electron的工作原理、大型工程构建、常见技术方案、周边生态工具等进行了细致、深入地讲解。
工作原理维度:
对Electron及其周边工具的原理进行了深入讲解,包括Electron依赖包的原理、Electron原理、electron-builder的原理等。
工程构建维度:
讲解了如何驾驭和构建一个大型Electron工程,包括使用各种现代前端构建工具构建Electron工程、自动化测试、编译和调试Electron源码等。
技术方案维度:
总结了实践过程中遇到的一些技术难题以及应对这些难题的技术方案,包括跨进程消息总线、窗口池、大数据渲染、点对点通信等。
周边工具维度:
作者根据自己的“踩坑”经验和教训,有针对性地讲解了大量Electron的周边工具、库和技术,涉及Qt开发框架、C++语言、Node.js框架甚至Vite构建工具等,帮助读者拓宽技术广度,掌握开发Electron应用需要的全栈技术。

图书特色

海康威视技术专家、Electron布道者、优秀开源项目作者撰写
深入浅出讲解Electron工作原理、大型工程构建、常见技术方案、周边生态工具,指导读者开发稳定、健壮的Electron应用

图书前言

缘起
2019年的春天,我开始动手写《Electron实战:入门、进阶与性能优化》一书,并用大概一年时间完成了该书的创作。书上市后,从各方面的反馈来看,还是达到了我的预期目标。很多读者特意联系我,告诉我书里的知识帮助他们解决了工作中的实际问题。这使我萌生了再写一本书的想法。
2020年的春天,我调换了工作岗位,虽然仍是基于Electron工作,但所面临的问题与挑战都是前所未有的,所产出的产品的用户群更大,用户所使用的环境也更多样。除了工作本身带来的挑战被逐一克服之外,我还应用了很多新的方案和技术以提升产品的用户体验。
与此同时,Electron领域也发生了重大的变革,Electron版本现如今已更新到了13.x.x,难以计数的Issue得到解决,同时也新增了很多重要的功能,废弃了一些重要的API和内置库。Electron领域最重要的库electron-builder和Spectron也升级了多个版本。每次升级我都会第一时间去了解它们做了哪些更新,并验证这些更新是否可以应用于我的实际工作中。
除Electron及其生态外,商业社会也更加倾向于使用这种技术来开发桌面应用,像阿里巴巴、腾讯、京东、网易、美团、拼多多等大厂都有基于Electron开发的产品,也都在招聘具备Electron实战经验的人才,而且岗位薪资都相当可观,比同等岗位前端开发工程师的薪资要高出一大截。然而从我近一年的面试经历来看,这方面的人才还是非常匮乏的。
于是我从2020年7月份开始动手写这本新书,足足用了一年的时间才写完。希望我这一年的工作能为这个领域的同人做些微末的贡献。
介绍
本书并不是《Electron实战:入门、进阶与性能优化》的替代品。《Electron实战:入门、进阶与性能优化》的内容是偏最佳实践的,希望开发者了解怎样以最佳的姿态进入这个领域,怎样用最佳的手段开发出Electron应用,目的是帮助开发者提升生产力。而本书的内容是偏底层的,旨在帮助开发者了解Electron及其周边工具的底层运转逻辑,不畏Electron开发领域的难题,即使碰到问题也能找出根本原因和解决方案。也就是说,本书是帮助开发者夯实基础的。
这两本书的目的都是让开发者开发出稳定、健壮的Electron应用。
由于涉及了很多底层实现细节(C++编程、操作系统、Node.js和Chromium等),所以本书要求读者具备一定的前端开发基础。如果你的前端技术尚处于初级阶段,希望能通过Electron入门桌面端开发,那么我建议你先读《Electron实战:入门、进阶与性能优化》并做一些实战练习,之后再来读本书。
本书以“如何基于Electron开发桌面应用”为主线,介绍了大量的周边工具、库及技术。本书的目的是希望读者能从容地用Electron开发桌面应用,但凡对此目的有巨大帮助的技术,我都不希望读者错过,所以里面涉及了Qt开发框架、C++语言、
Node.js框架甚至Vite构建工具等,希望读者也能像我一样,不要把眼光局限在Electron这一单一的技术上,不是为了学习技术而学习技术,而是为了达到目的、创造价值而学习技术。
功利心太强可能会导致开发者忽视基础知识的重要性,在这种状态下构建工程是很容易出问题的,且一旦出问题开发者也没有能力在短时间内解决,甚至连甄别问题的根源都无能为力。基于此,本书也介绍了很多原理性的内容,帮助读者知其然也知其所以然。前辈的箴言“勿在浮沙筑高台”声犹在耳,希望你学完本书也能夯实构建Electron桌面应用的基础。
有的读者可能会担心,这本书又讲原理又涉及Electron与周边生态,会不会范围太广、内容太杂,导致质量不精。这确实非常考验作者对知识的驾驭和掌控能力,我在这方面主要做了以下三点工作。
首先,这不是一本面面俱到地介绍Electron与周边生态的书,它只截取了我认为最重要的部分,如果你希望由浅入深、面面俱到地学习Electron,那么我建议你先读《Electron实战:入门、进阶与性能优化》一书,再学习一下官网文档。
其次,本书不会涵盖那些在互联网上随处可见的教程、文章甚至面试题所涉及的内容。本书介绍的内容大部分都是我踩坑付出代价后得到的经验,大部分书里的知识点都是具备独创性的,是首次公开的。
最后,本书假定读者具备现代前端开发能力,了解基本的Node.js知识,甚至拥有一定的原生桌面应用开发经验。在做了这方面的约束后,我才可以从容地绕开那些基础知识,直接与读者交流实际业务领域中的技术问题。
编排
本书分为三部分。第一部分“原理”介绍Electron及其周边重要工具的运行原理,第二部分“工程”介绍使用不同的技术栈开发大型Electron工程的相关知识,第三部分“实践”介绍实际项目开发中的一些具体的技术方案,如窗口池、跨进程消息总线等。
本书部分源码开源地址为https://gitee.com/horsejs/simple-but-profound-electron(注意:并非所有示例的源码都公开在此仓储下了)。
另外,本书的三部分内容并没有明确的先后顺序,读者如果觉得第一部分某些章涉及了大量的C++知识,读起来比较吃力,可以先跳过这些章,甚至可以直接从第二部分或第三部分开始阅读,等掌握了足够的基础知识后再回头阅读第一部分也不迟。如果读者对实践内容更感兴趣,也可以跳过前两个部分直接阅读第三部分的内容,等读到关联的知识点,再回到前面学习指定的知识点,这种学习方式也未尝不可。
交流
虽然有多年的桌面端、前端开发经验,但我深知这两个领域的知识浩如烟海,自己掌握的知识不及其万一,所以书中难免有错谬或不妥之处。如读者发现了这些缺陷,希望能不吝赐教,与我联系。
如果读者对本书的内容有疑问,我会尽可能地给大家提供帮助,请大家加QQ群联系我:949674481。或者在微信公众号“桌面软件”中留言联系我。
致谢
本书要献给我的妈妈,是她无私的爱造就了今天的我。
感谢Electron开发团队及其维护者,是他们开发了这么令人兴奋的项目,使我们有机会基于Electron开发各种有趣的应用。没有Electron就没有本书。
感谢所有与我讨论技术问题的同事和朋友,很高兴工作或生活中能遇到他们,我的很多灵感都是他们给予的。
在我使用Electron开发项目的过程中及写作本书时,参考了很多网友发布的技术文章,在此向这个领域乐于分享的开发者们表示感谢。
感谢参与本书出版工作的编辑老师,他们的工作的重要性一点儿也不亚于我的,我们一起成就了本书。
感谢所有读者,大家的支持是我不断前进的动力,希望大家能从本书中得到期望的收获,让我们一起进步吧!

上架指导

计算机\程序设计

封底文字

本书基于作者丰富且真实的 Electron 产品研发经历,给出了交付可靠Electron软件的宝贵经验,深入浅出地把原理、工程、实践经验进行了完整呈现。如果你是真正将产品交付到用户手中的技术从业人员,这本书是你不可或缺的。
——罗昕 网易云音乐桌面端负责人

随着Electron在桌面开发市场的占用率逐渐登顶,Electron相关的书籍也逐渐丰富起来,但目前能达到本书这种深度广度兼具的仍属凤毛麟角。相对于前一本姊妹篇,本书写得更为细致入微,且更加深入地揭示了Electron的原理。书中既有一手的工程实践经验,也有底层原理探讨;无论是前端开发人员,还是多年的浏览器底层开发专家,研读本书都能得到很多实用的收获。
——王斌(龙泉寺扫地僧) miniblink作者

本书凝聚了Electron技术体系的核心精华部分,书中由基本的原理入手,再到工程最佳实践讲解,并没有简单罗列知识点,而是注重逐步引导读者深入到Electron的技术体系中,是相关开发人员入门到提高的不二选择。
——裘逑 菜鸟网络高级技术专家

作为国内Electron开发的先行者之一,作者拥有丰富的实战经验,曾参与多个大型项目的开发。书中也沉淀了作者在参与大型项目过程中的大量工程实践经验,覆盖发布、调试、跨语言集成等多个维度。无论是刚刚开始参与项目还是已参与多个项目,本书都会给你带来意想不到的收获。
——杨飞 海康威视IT技术专家、开发经理

作者简介

刘晓伦 著:刘晓伦
资深技术专家,有10余年研发经验,是Electron及其相关技术在企业应用领域的早期实践者,GitHub/Gitee优秀开源项目作者。作者还为Electron项目提交过数个Issue和Pull Request均被官方接纳。
原远传研发中心负责人、小远机器人研发总监。现在担任一家创业公司的技术负责人,负责的产品以Electron为主要技术方向。
除此之外,作者还有着十余年的前端及C++(Qt)的开发经验,深入研究过Chromium的源码及相关的协议(DevTools Protocol和V8 Debugger Protocol),其主导研发的产品为数家世界五百强企业提供服务。

图书目录

前言
第一部分 原理
第1章 Electron包原理解析 3
1.1 安装失败 3
1.2 npm钩子 4
1.3 镜像策略 6
1.4 缓存策略 9
1.5 注入命令 11
1.6 共享环境变量 13
1.7 合适的版本 15
第2章 Electron原理解析 17
2.1 Chromium原理 17
2.2 Node.js原理 20
2.3 源码结构 23
2.4 主进程Node.js环境 25
2.5 公开API 27
2.6 不同进程不同的API 31
2.7 加载应用入口脚本 32
2.8 提供系统底层支持 34
2.9 解析asar文件 37
2.10 渲染进程Node.js环境 41
2.11 支持不同的操作系统 42
2.12 进程间通信 45
2.13 页面事件 48
第3章 electron-builder原理解析 52
3.1 使用方法 52
3.2 原理介绍 53
3.3 伪交叉编译 57
3.4 辅助工具app-builder 59
3.5 为生产环境安装依赖 61
3.6 生成asar 62
3.7 修改可执行程序 63
3.8 NSIS介绍 66
3.9 生成安装包 68
第4章 electron-updater原理解析 71
4.1 使用方法 71
4.2 如何校验新版本的安装包 73
4.3 Windows应用升级原理 75
4.4 Mac应用升级原理 78
第5章 其他重要原理 80
5.1 缓存策略与控制 80
5.2 V8脚本执行原理 83
5.3 V8垃圾收集原理 87
第二部分 工程
第6章 使用Vite构建Electron项目 91
6.1 Vite为什么如此之快 91
6.2 大型Electron工程结构 92
6.3 定义启动脚本 93
6.4 启动开发服务 95
6.5 设置环境变量 96
6.6 构建主进程代码 98
6.7 启动Electron子进程 100
6.8 配置调试环境 102
6.9 打包源码 104
6.10 打包依赖 106
6.11 制成安装程序 108
6.12 引入TypeScript支持 111
第7章 使用webpack构建Electron项目 113
7.1 需求起源 113
7.2 准备环境 114
7.3 编译主进程代码 116
7.4 启动多入口页面调试服务 117
7.5 启动Electron子进程 120
7.6 制成安装包 121
7.7 注册应用内协议 123
第8章 使用Rollup构建Electron项目 125
8.1 Rollup与Svelte 125
8.2 准备开发环境 127
8.3 制成安装包 130
第9章 自动化测试 134
9.1 集成Spectron及Spectron原理 134
9.2 在Jest测试框架中使用Spectron 137
第10章 编译与调试Electron源码 141
10.1 build-tools构建工具介绍 141
10.2 手工构建Electron源码 142
10.3 构建不同版本的Electron 150
10.4 调试Electron源码 151
10.5 调试崩溃报告 156
第11章 应用分发 162
11.1 源码混淆 162
11.2 应用签名 165
11.3 静默安装与开机自启 168
11.4 自定义安装画面 170
11.5 软件防杀 173
第12章 逆向分析 174
12.1 用户安装目录 174
12.2 用户数据目录 175
12.3 注册表键值 177
12.4 自研逆向调试工具 178
第13章 其他工程要点 183
13.1 使用D8调试工具 183
13.2 内存消耗监控 185
13.3 子应用管控 189
第三部分 实践
第14章 跨进程消息总线 195
14.1 前端事件机制 195
14.2 Node.js的事件机制 197
14.3 Electron进程间通信 198
14.4 跨进程事件 200
14.5 使用Promise封装事件 203
14.6 基于HTML API的跨进程事件 205
14.7 跨进程通信带来的问题 207
第15章 窗口池 209
15.1 窗口渲染过慢 209
15.2 构建窗口池 210
15.3 构建窗口实例 212
15.4 通用的窗口标题栏 214
15.5 消费窗口池中的窗口 215
15.6 模拟模态窗口 216
第16章 原生模块 219
16.1 需求起源 219
16.2 原生模块开发方式 221
16.3 传统原生模块开发 223
16.4 使用Node-API开发原生模块 225
16.5 Node-API进阶 229
16.6 Electron环境下的原生模块 233
第17章 应用控制 236
17.1 应用单开 236
17.2 注册唤起协议 237
17.3 唤起外部应用 238
17.4 常规截图方案介绍 239
17.5 使用第三方截图库 241
第18章 Electron与Qt的整合 245
18.1 需求起源 245
18.2 命名管道服务端 247
18.3 命名管道客户端 250
18.4 通信协议 253
18.5 入口应用配置 256
18.6 应用退出的事件顺序 258
18.7 关闭窗口的问题 260
第19章 大数据渲染 262
19.1 常规无限滚动方案介绍 262
19.2 DOM结构与样式 265
19.3 模拟滚动条 267
19.4 处理滚动事件 268
19.5 滚动条的显隐动效 270
19.6 内置的数据持久化能力 271
第20章 点对点通信 274
20.1 WebRTC原理 274
20.2 构建WebRTC服务器 275
20.3 发送超大文件 276
20.4 接收超大文件 280
第21章 加密信息提取 283
21.1 需求起源 283
21.2 分析调试源码 284
21.3 暴露解密方法 286
21.4 转发请求 287
21.5 注入脚本 288
21.6 监控cookie 289
第22章 其他实践指导 292
22.1 分析首屏加载时间 292
22.2 模拟弱网环境 294
22.3 数据存储方案性能对比 296
22.4 加载本地图片 302
22.5 桌面端编程的生态演化 302
22.6 Electron的竞争对手 304

教学资源推荐
作者: 陈帆 和红杰 周荣辉
作者: 郝玉洁
作者: 郑晓薇 编著
作者: 覃华 韦兆文 陈琴
参考读物推荐
作者: [美]埃内斯·比尔金(Enes Bilgin) 著
作者: Marina Fisher;Ray Lai;Sonu Sharma;Laurence Moroney
作者: [印度] 科斯?拉曼(Kirthi Raman)著
作者: (美)Jennifer Campbell; Paul Gries; Jason Montojo; Greg Wilson 著