导读:本文简述了PC客户端业务在文库中疾速落地的过程,其中包含了后期的技术选型,方案设计,PC客户端跨平台原理,以及Electron框架的利用细节。从利用深刻到原理,解说PC客户端跨平台技术,如何实现跨平台渲染,如何实现原生API的调用,和如何进行不同指标平台的利用构建。通过浏览本文,能够疾速上手基于Electron框架进行PC客户端业务的开发。
全文2545字,预计浏览工夫7分钟
前言
跨平台技术在挪动客户端平台(Android & iOS)上曾经倒退了多年,从Hybrid App到小程序,再到React Native和Flutter曾经失去比拟宽泛的利用。无论是前端计划,桥接计划,还是自渲染计划,都须要解决三个问题:
- 如何进行UI渲染?
- 如何实现原生API的调用?
- 如何进行客户端构建?
不同的挪动客户端跨平台计划都有本人的解决形式,然而在PC客户端平台上,大部分传统应用软件还是以单平台开发为主。近期文库业务开始启动PC客户端的我的项目,同时反对Windows平台和MacOS平台,从技术的角度心愿通过PC客户端的跨平台技术,以更低的老本,更高效的迭代来适应互联网产品的节奏,同时保障不同平台下的一致性体验。本文通过PC客户端跨平台框架的剖析及跨平台业务利用进行开展。
一、技术选型
文库的PC客户端次要波及到桌面OS的Windows和MacOS,以后这两种平台的应用软件开发包含了单平台开发、两头平台开发、跨平台开发几种模式,其中依据目前文库业务研发人员构造和相熟水平,Flutter和Electron是重点去考查的PC客户端跨平台框架。因为文库在文档页面渲染上的技术积攒,能够疾速复用到业务场景中,所以最终抉择了Electron跨平台技术计划。
二、Electron框架介绍
接下来,介绍一下Electron框架到底是什么?如何实现跨平台的?其实要回到开篇提到的跨平台须要解决的通用问题,UI渲染、原生API、客户端构建。Electron是通过集成浏览器内核,通过前端的技术来实现不同平台下的渲染,Electron框架次要解决以下问题:
- 渲染与服务的交融,即UI和底层服务的交融;
- 不同平台下零碎API的调用及封装;
- 不同平台下利用构建;
了解Electron框架原理,其难点在于Chromium和Node.js是如何互通的,因为咱们晓得他们都有本人独立的事件循环,不解决这个问题就无奈实现渲染和服务的交融,所以须要先理解Electron的多过程架构。
2.1 Electron多过程架构
Electron多过程架构参考了Chromium的多过程架构,行将渲染过程与主过程隔离,之所以如此设计是因为与OS从单用户到多任务的倒退过程相似,为防止一个出错的页面或插件bug引起整个浏览器和全副标签敞开。每个浏览器标签应用独立的过程,爱护整个利用免受渲染过程中Bug和故障影响。在理论业务中,UI都是在渲染过程进行的,当须要应用零碎服务时如I/O、DB、Push等等,通过IPC形式在主过程中实现,Electron框架自身已提供了IPC能力,包含ipcMain和ipcRenderer,具体应用能够查问Electron官网文档,有比拟具体的阐明和利用示例。
2.2 Chromium与Node.js交融
把Chromium和Node.js两套独立的体系进行通信是Electron重点解决的问题之一,依据官网公布的相干介绍,首先尝试了用libuv来替换Chromium的message loop,每个平台都有本人的GUI音讯循环,实现过程绝对简单,最终因为资源耗费和提早的问题无奈失去无效解决,所以放弃了。目前Electron框架通过在一个独自的线程中轮询Node的事件循环的形式来实现Chromium与Node.js交融。具体实现能够查看框架源码,本文不进行开展阐明。
Node_bindings.cc源码源码地址:https://github.com/electron/electron/blob/master/shell/common/node_bindings.cc
===
三、Electron业务实际
3.1 多过程计划
文库同样采纳相似Chromium的多过程计划,其中主过程负责原生服务的调用和业务服务的提供,以及Window的治理,能够将每个Window了解为一个渲染过程。渲染过程包含主Window(如图中绿色1区域所示)和内容Window(如图中红色2区域所示),内容Window复用是因为在理论应用过程中创立和开释Window会有显著的加载耗时,并且更多的Window会减轻内存占用。所以无论是切换导航栏或者标签都通过内容Window进行加载,并且记录页面状态,实现页面的状态复原,以及离屏渲染。
3.2 基于线上业务疾速迭代
PC客户端局部页面与线上页面是统一的,所以这部分没必要进行反复开发,尽量通过去复用线上业务,次要的工作就是对线上页面进行PC客户端适配,页面布局、视图屏蔽、自适应等等。目前应用注入的形式去实现,另外线上业务也是常常变动的,所以注入的代码尽量也是通过云端管制。具体形式是通过Window、BrowserWindow、WebView中的webContent进行注入,这里须要检测页面生命周期,须要在页面加载实现后进行注入。
3.3 Debug & Release
Electron框架会将代码进行编译,再进行打包,开发中每次都须要肯定的工夫运行客户端程序,很影响效率。所以能够Debug模式下通过Node服务进行运行,Release模式下才进行编译打包,来实现开发中的所见即所得。
===
四、总结和瞻望
除了Electron框架在PC客户端上的利用,文库业务也在挪动客户端上引入Flutter框架,并应用新的框架重构文档相干的能力。随着Flutter 2.0的公布,对PC客户端更敌对的反对,以及文库业务基于Flutter的文档能力建设欠缺,通过Flutter构建Windows,MacOS,Android,iOS全平台版本客户端成为可能,也在继续的摸索中。
举荐浏览:
当技术重构遇上DDD,如何实现业务、技术双赢?
接口文档主动更改?百度程序员开发效率MAX的秘诀
技术揭秘!百度搜寻中台低代码的摸索与实际
百度智能云实战——动态文件CDN减速
化繁为简--百度智能小程序主数据架构实战总结
百度搜寻中台海量数据管理的云原生和智能化实际
百度搜寻中“泥沙俱下”的加盟信息,如何靠AI 解决?
---------- END ----------
百度 Geek 说
百度官网技术公众号上线啦!
技术干货 · 行业资讯 · 线上沙龙 · 行业大会
招聘信息 · 内推信息 · 技术书籍 · 百度周边
欢送各位同学关注