深入浅出Electron:原理、工程与实践
上QQ阅读APP看书,第一时间看更新

前言

缘起

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开发项目的过程中及写作本书时,参考了很多网友发布的技术文章,在此向这个领域乐于分享的开发者们表示感谢。

感谢参与本书出版工作的编辑老师,他们的工作的重要性一点儿也不亚于我的,我们一起成就了本书。

感谢所有读者,大家的支持是我不断前进的动力,希望大家能从本书中得到期望的收获,让我们一起进步吧!