Skip to content

Commit 91392ac

Browse files
authored
Merge pull request SugarTurboS#2 from 954053260/master
[feature]更新readme
2 parents f74cf35 + e4c9402 commit 91392ac

File tree

6 files changed

+112
-94
lines changed

6 files changed

+112
-94
lines changed

README.md

Lines changed: 71 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,20 @@ npm i sugar-electron-cli -g
3131
sugar-electron-cli init
3232
```
3333

34-
### 前言
35-
今天给大家带来一款基于Electron桌面开发平台应用框架sugar-electron,期望能改善Electron应用稳定性和帮助开发团队降低开发和维护成本。
34+
## 前言
35+
今天给大家带来一款基于Electron桌面开发平台的自研应用框架Sugar-Electron,期望能改善Electron应用稳定性和帮助开发团队降低开发和维护成本。
3636

37-
笔者使用Electron做桌面应用,已经有3年的时间,期间也遇到很多大大小小的坑。==总结一下,最大的问题还是应用稳定性和开发效率低问题。==
37+
笔者使用Electron做桌面应用,已经有3年的时间,期间也遇到很多大大小小的坑。但总结起来,最大的问题还是应用稳定性和开发效率问题。我们期望通过这个框架,能让应用程序在这两个方面有所优化。
3838

39-
#### 关于应用稳定性低
39+
项目源码地址:
40+
[https://github.com/SugarTurboS/Sugar-Electron](https://github.com/SugarTurboS/Sugar-Electron)
41+
42+
如有任何疑问,可以扫码加入微信群聊讨论
43+
44+
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200805154200308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ZvcmV2ZXJDamw=,size_16,color_FFFFFF,t_70)
45+
46+
47+
## 关于应用稳定性
4048

4149
我们知道Electron应用程序有三大基础模块。
4250
- 主进程
@@ -49,31 +57,32 @@ sugar-electron-cli init
4957
- 主进程出现未捕获的异常崩溃,直接导致应用退出。
5058
- 主进程出现阻塞,直接导致全部渲染进程阻塞,UI处于阻塞无响应状态。
5159

52-
#### 关于开发效率低
60+
所以,在Sugar-Electron中,我们引入了Service进程的概念,期望将业务原来写在主进程的代码,迁移到Service进程中(本质上是渲染进程),使得这些代码导致的崩溃不会使得整个程序退出。而主进程的进程管理器可以在Service崩溃时,重启该进程并恢复崩溃前的状态,从而提高整个程序的稳定性和可用性。
5361

54-
Electron属于桌面开发平台提供桌面应用开发的能力框架,上手简单。但框架本身缺少约定,因此使用Electron做应用开发,系统模块会出现各种千奇百怪的划分,代码会出现各种多种多样的写法。sugar-electron按照约定进行开发,降低团队协作成本。
62+
## 关于开发效率低
5563

56-
#### 特性
64+
Electron属于桌面开发平台提供桌面应用开发的能力框架,上手简单。但框架本身缺少约定,因此使用Electron做应用开发,系统模块会出现各种千奇百怪的划分,代码会出现多种多样的写法,这会显著的增加学习成本,降低开发人员的效率。sugar-electron按照约定进行开发,降低团队协作成本,以提升效率。
65+
66+
# 特性
5767

5868
- 内置进程间通信模块,支持请求响应、发布订阅的方式
59-
- 内置进度间状态共享模块,支持状态同步变更、状态变更监听
69+
- 内置进程间状态共享模块,支持状态同步变更、状态变更监听
6070
- 内置进程管理模块,支持进程模块集中式管理
6171
- 内置配置管理模块,支持开发、测试、生产环境配置切换
62-
- 支持高度可扩展的插件机制
72+
- 内置插件模块,支持高度可扩展的插件机制
6373
- 框架侵入性低,项目接入改造成本低
6474
- 渐进式开发
6575

6676

67-
### 设计原则
77+
# 设计原则
78+
79+
一、sugar-electron一切围绕渲染进程为核心设计,主进程只是充当进程管理(创建、删除、异常监控)和调度(进程通信、状态功能桥梁)的守护进程的角色。
6880

69-
一、sugar-electron一切围绕渲染进程为核心设计,主进程只是充当进程管理(创建、删除、异常监控)和调度(进程通信、状态功能桥梁)的守护进程的角色。
70-
7181
主进程不处理业务逻辑,这么设计的好处:
72-
82+
7383
1. 可以避免主进程出现未捕获异常崩溃,导致应用退出
7484
1. 避免主进程出现阻塞,引起全部渲染进程阻塞,导致UI阻塞无响应
7585

76-
7786
二、sugar-electron所有的业务模块都是渲染进程。我们知道进程之间是不能直接访问的,为了让进程之间的调用就像同线程模块之间直接调用一样方便,sugar-electron提供了以下三个模块:
7887

7988
1. 进程间通信模块
@@ -84,23 +93,27 @@ Electron属于桌面开发平台提供桌面应用开发的能力框架,上手
8493

8594

8695
**如下是框架逻辑视图:**
87-
![image](https://store-g1.seewo.com/easiclass-public/1800be3471d241ccad9109dcb052f446)
96+
![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zdG9yZS1nMS5zZWV3by5jb20vZWFzaWNsYXNzLXB1YmxpYy9lYmU0Yzc2NjBmOTA0ZWQzYjAxY2RlMTAyNjIyMDYxNg?x-oss-process=image/format,png)
8897

89-
**sugar-electron基于类微内核架构设计,将内部分为以下七大核心模块,如下图所示:**
98+
**sugar-electron基于类微内核架构设计,如下图所示:**
9099

91-
![image](https://store-g1.seewo.com/easiclass-public/b8a1306ad0b241bf96d70fe8ffcca83c)
100+
![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zdG9yZS1nMS5zZWV3by5jb20vZWFzaWNsYXNzLXB1YmxpYy84ZTVjNzY2NWY1NmE0ODRmOWQ4OGExNWIyZDQ2MzgxNA?x-oss-process=image/format,png)
92101

93-
- 基础进程、服务进程、进程管理,提供业务模块开发能力
94-
- 进程间通信、进程间状态共享、配置中心,提供业务模块之间数据通信能力
95-
- 插件管理,提供框架功能扩展和业务复用能力
102+
**其框架核心有七大模块:**
103+
- 基础进程类BaseWindow
104+
- 服务进程类Service
105+
- 进程管理windowCenter
106+
- 进程间通信ipc
107+
- 进程间状态共享store
108+
- 配置中心config
109+
- 插件管理plugins
96110

97-
### 核心功能
111+
# 核心功能
98112

99-
100-
#### 基础进程类——BaseWindow
113+
## 基础进程类——BaseWindow
101114
基础进程类BaseWindow基于BrowserWindow二次封装,sugar-electron以BaseWindow为载体,聚合了框架所有核心模块。
102115

103-
##### 举个例子
116+
### 举个例子
104117

105118

106119
**使用BrowserWindow创建渲染进程**
@@ -128,10 +141,10 @@ const browserWindowInstance = winA.open();
128141
129142
```
130143

131-
#### 服务进程类——Service
144+
## 服务进程类——Service
132145
在实际业务开发中,我们需要有一个进程去承载业务进程通用模块的功能,Service为此而生。Service进程实例实际上也是渲染进程,只是开发者只需要传入启动入口js文件,即可创建一个渲染进程,且BaseWindow一样,聚合框架所有核心模块。
133146

134-
##### 举个例子
147+
### 举个例子
135148

136149
```
137150
// -----------------------主进程-----------------------
@@ -150,7 +163,7 @@ service.on('closed', function () {
150163
});
151164
```
152165

153-
#### 进程通信——ipc
166+
## 进程通信——ipc
154167

155168
ipc作为进程间通信核心模块,支持三种通信方式:
156169

@@ -159,18 +172,13 @@ ipc作为进程间通信核心模块,支持三种通信方式:
159172
1. 主进程与渲染进程通信
160173

161174

162-
##### 请求响应
175+
## 请求响应
163176

164177
**逻辑视图:**
165178

166-
![image](https://store-g1.seewo.com/easiclass-public/972f0e2a51b24e63a4a3410305a5f124)
167-
168-
169-
**流程图:**
170-
171-
![image](https://store-g1.seewo.com/easiclass-public/c8e0379cb5e04abd86f021033d59b1b2)
179+
![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zdG9yZS1nMS5zZWV3by5jb20vZWFzaWNsYXNzLXB1YmxpYy85NzJmMGUyYTUxYjI0ZTYzYTRhMzQxMDMwNWE1ZjEyNA?x-oss-process=image/format,png)
172180

173-
##### 举个例子
181+
### 举个例子
174182

175183

176184
```
@@ -202,13 +210,13 @@ console.log(r2); // service-1响应
202210
2 | 找不到进程注册服务
203211
3 | 超时
204212

205-
##### 发布订阅
213+
## 发布订阅
206214

207215
**逻辑视图:**
208216

209-
![image](https://store-g1.seewo.com/easiclass-public/0686fbbf2d0744e4a011e08d90ca3fe8)
217+
![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zdG9yZS1nMS5zZWV3by5jb20vZWFzaWNsYXNzLXB1YmxpYy8wNjg2ZmJiZjJkMDc0NGU0YTAxMWUwOGQ5MGNhM2ZlOA?x-oss-process=image/format,png)
210218

211-
##### 举个例子
219+
### 举个例子
212220

213221

214222
```
@@ -238,11 +246,11 @@ windowCenter.service.unsubscribe('service-publisher', cb);
238246
239247
```
240248

241-
##### 主进程与渲染进程间通信(进程名"main",为主进程预留)
249+
## 主进程与渲染进程间通信(进程名"main",为主进程预留)
242250

243-
sugar-electron框架设计理念所有业务模块都有各个渲染进程完成,所以基本上不存在与主进程通信的功能,但也非绝无仅有。所以sugar-electron进程通信模块支持与主进程通信接口。
251+
sugar-electron框架设计理念所有业务模块都有各个渲染进程完成,所以基本上不存在与主进程通信的功能,但不排除有主进程与渲染进程通信的场景。所以sugar-electron进程通信模块支持与主进程通信接口。
244252

245-
##### 举个例子
253+
### 举个例子
246254

247255
```
248256
// 主进程
@@ -263,12 +271,12 @@ console.log(res); // 我是主进程
263271
264272
```
265273

266-
#### 进程管理——windowCenter
274+
## 进程管理——windowCenter
267275
sugar-electron所有的业务模块都是渲染进程。我们知道进程之间是不能直接访问的,所有有了进程管理模块。
268276

269277
所有的渲染进程都能在windowCenter中根据进程名对应的唯一key找到对应的渲染进程,让进程之间的调用就像同线程模块之间直接调用一样方便。
270278

271-
##### 举个例子
279+
### 举个例子
272280

273281
需求:winA内打开winB,并在winB webContents初始化完成后,设置窗口B setSize(400, 400)
274282

@@ -315,15 +323,15 @@ const unsubscribe = winB.subscribe('ready-to-show', () => {
315323

316324
==备注:服务进程句柄通过windowCenter也可以获取==
317325

318-
#### 进程间状态共享——store
326+
## 进程间状态共享——store
319327
sugar-electron是多进程架构设计,在业务系统中,避免不了多个业务进程共享状态。由于进程间内存相互独立,不互通,为此sugar-electron框架集成了进程状态共享模块。
320328

321329
进程状态共享模块分成两个部分:
322330

323331
- 主进程申明共享状态数据
324332
- 渲染进程设置、获取共享状态数据,订阅状态变化
325333

326-
##### 举个例子
334+
### 举个例子
327335

328336

329337
```
@@ -390,7 +398,7 @@ await moduleA.setState({
390398
391399
```
392400

393-
#### 配置——config
401+
## 配置——config
394402
sugar-electron提供了多环境配置,可根据环境变量切换配置,默认加载生成环境配置。
395403

396404
```
@@ -403,9 +411,9 @@ config
403411

404412
**流程图:**
405413

406-
![image](https://store-g1.seewo.com/easiclass-public/13ee6bf748514953a3a67f9c21606a28)
414+
![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zdG9yZS1nMS5zZWV3by5jb20vZWFzaWNsYXNzLXB1YmxpYy8xM2VlNmJmNzQ4NTE0OTUzYTNhNjdmOWMyMTYwNmEyOA?x-oss-process=image/format,png)
407415

408-
##### 举个例子
416+
### 举个例子
409417

410418

411419
```
@@ -423,7 +431,7 @@ console.log(config);
423431
- sugar-electron默认根据根目录config自动初始化
424432

425433

426-
#### 插件——plugins
434+
## 插件——plugins
427435
一个好用的框架离不开框架的可扩展性和业务复用。开发者通过plugins模块自定义插件和配置安装插件。
428436

429437

@@ -432,7 +440,7 @@ console.log(config);
432440
1. config目录配置问题plugins.js配置插件安装
433441
1. 使用插件
434442

435-
##### 插件封装
443+
### 插件封装
436444
```
437445
// 1、自定义封装ajax插件adpter
438446
const axios = require('axios');
@@ -478,7 +486,7 @@ module.exports = {
478486
}
479487
```
480488

481-
##### 插件安装
489+
## 插件安装
482490
在配置中心目录plugins.js配置插件安装
483491
```
484492
config
@@ -501,18 +509,18 @@ exports.adpter = {
501509
};
502510
```
503511

504-
##### 插件使用
512+
## 插件使用
505513

506514
```
507515
// 3、使用插件——winA
508516
const { plugins } = require('sugar-electron');
509517
const res = await plugins.adpter.callAPI('FETCH_DATA_1', {});
510518
```
511519

512-
### 自动初始化核心模块
520+
## 自动初始化核心模块
513521
使用过egg开发者应该知道,egg基础功能模块会根据对应的目录自动初始化。sugar-electron也提供根据目录自动初始化的能力。只需要使用框架启动接口start传入配置参数即可完成核心模块自动初始化
514522

515-
##### 举个例子
523+
### 举个例子
516524

517525
```
518526
const { start } = require('sugar-electron');
@@ -526,9 +534,9 @@ start({
526534
})
527535
```
528536

529-
### 注意事项
537+
# 注意事项
530538

531-
由于sugar-electron核心模块会自动判断主进程或者渲染进程环境,自动选择加载不同环境的模块,如果使用webpack打包会导致把两个环境的代码都打包进去,可能还会出现异常。
539+
1、由于sugar-electron核心模块会自动判断主进程或者渲染进程环境,自动选择加载不同环境的模块,如果使用webpack打包会导致把两个环境的代码都打包进去,可能还会出现异常。
532540

533541
因此,如果使用webpack打包,引入sugar-electron采用如下方式:
534542

@@ -542,9 +550,9 @@ const { ipc, store, ... } = require('sugar-electron/main')
542550
const { ipc, store, ... } = require('sugar-electron/render')
543551
```
544552

545-
### API
553+
# API
546554

547-
#### start
555+
## start
548556
框架启动接口,自动挂载config、store、windowCenter、plugins模块
549557

550558
**主进程API**
@@ -575,7 +583,7 @@ start({
575583
});
576584
```
577585

578-
#### BaseWindow
586+
## BaseWindow
579587
```
580588
/**
581589
* 主进程调用
@@ -636,7 +644,7 @@ const instance = winA.open({...}); // 创建窗口
636644
instance === winA.getInstance(); // true
637645
```
638646

639-
#### Service
647+
## Service
640648

641649
**主进程API**
642650
```
@@ -667,7 +675,7 @@ service.on('closed', function () {
667675
});
668676
```
669677

670-
#### windowCenter
678+
## windowCenter
671679

672680
**主进程、渲染进程API**
673681

@@ -698,7 +706,7 @@ windowCenter['winA'].on('ready-to-show', () => {
698706
699707
```
700708

701-
#### ipc
709+
## ipc
702710
**主进程API**
703711
**response 响应**
704712
```
@@ -805,7 +813,7 @@ btn1.onclick = () => {
805813
}
806814
807815
```
808-
### store
816+
## store
809817

810818
**主进程API**
811819

0 commit comments

Comments
 (0)