Sugar-Electron 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Sugar-Electron 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Sugar-Electron 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 JavaScript HTML/CSS
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具
开源组织
地区 国产
投 递 者 SugarTurbo
适用人群 未知
收录时间 2020-08-06

软件简介

基于 Electron 桌面开发平台的自研应用框架 Sugar-Electron,期望能改善 Electron 应用稳定性和帮助开发团队降低开发和维护成本。

关于应用稳定性

Electron应用程序有三大基础模块:

  • 主进程
  • 渲染进程
  • 进程间通信

由于我们属于多窗口(多渲染进程)的应用,所以我们会把窗口公共的服务模块都写到主进程模块,这为整个程序的稳定性埋下了隐患。

在Electron中,主进程控制了整个程序的生命周期,同时也负责管理它创建出来的各个渲染进程。一旦主进程的代码出现问题,那么会导致以下情况发生。

  • 主进程出现未捕获的异常崩溃,直接导致应用退出。
  • 主进程出现阻塞,直接导致全部渲染进程阻塞,UI处于阻塞无响应状态。

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

关于开发效率低

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

特性

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

设计原则

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

主进程不处理业务逻辑,这么设计的好处:

  1. 可以避免主进程出现未捕获异常崩溃,导致应用退出
  2. 避免主进程出现阻塞,引起全部渲染进程阻塞,导致UI阻塞无响应

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

  1. 进程间通信模块
  2. 进程间状态共享模块
  3. 进程管理模块

三、为了保证框架核心的足够精简、稳定、高效,因此框架的扩展能力至关重要,为此sugar-electron提供自定义插件机制扩展框架能力,还可以促进业务逻辑复用,甚至于生态圈的形成。

如下是框架逻辑视图:

 image

sugar-electron基于类微内核架构设计,如下图所示:

image

其框架核心有七大模块:

  • 基础进程类BaseWindow
  • 服务进程类Service
  • 进程管理windowCenter
  • 进程间通信ipc
  • 进程间状态共享store
  • 配置中心config
  • 插件管理plugins
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(9) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
9 评论
42 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部