桌面应用开发框架Electron介绍

0 阅读6分钟

Electron:它本质上是一个让你用 Web 技术开发桌面应用 的框架。

也就是说,你可以用 HTML、CSS、JavaScript / TypeScript,再配合 Node.js,构建能在 Windows、macOS、Linux 上运行的桌面 App。很多你熟悉的应用,比如 VS Code、Slack、Discord、Notion、Postman,都和 Electron 这条技术路线密切相关。


🧭 Electron 是什么

Electron 是一个用于开发 跨平台桌面应用 的框架。

它的核心组成

Electron 可以简单理解成两部分的组合:

  • Chromium

    • 负责渲染界面
    • 也就是把你的前端页面当成桌面应用 UI 来运行
  • Node.js

    • 负责访问本地文件、系统资源、进程能力等
    • 让你的前端代码具备桌面应用所需要的“本地能力”

所以,Electron 的关键价值是:

  • 前端开发者可以直接做桌面应用
  • 一套代码可覆盖多个桌面平台
  • Web UI 开发体验比较成熟
  • 插件生态和 npm 生态非常强

🔍 Electron 的工作原理

理解 Electron,抓住它的进程模型就够了。

主进程

主进程是整个应用的入口,负责:

  • 创建窗口
  • 管理应用生命周期
  • 调用系统级能力
  • 菜单、托盘、通知、文件系统等

你可以把它理解成“桌面应用的大脑”。

渲染进程

每个窗口通常对应一个渲染进程,负责:

  • 显示页面
  • 渲染 UI
  • 响应用户交互

它本质上就像浏览器里的一个网页环境。

两者通信

主进程和渲染进程之间通过 IPC 通信。

常见模式是:

  1. 渲染进程发请求
  2. 主进程执行本地操作
  3. 再把结果返回给渲染进程

这个设计很重要,因为它关系到安全性
不要把 Node 能力直接暴露给页面,否则桌面应用会变成“带系统权限的网页”,这个组合听起来就很刺激,但对安全团队来说不是好刺激。


⚙️ Electron 能做什么

Electron 能做的大类事情很多,典型包括:

桌面应用 UI

  • 多窗口应用
  • 设置页、编辑器、后台面板
  • 富文本界面
  • 图表、表单、管理后台

本地系统能力

  • 文件读写
  • 打开本地目录
  • 调用系统菜单
  • 托盘图标
  • 系统通知
  • 剪贴板
  • 快捷键
  • 自动更新

网络与服务集成

  • 调用后端 API
  • WebSocket 实时通信
  • 本地数据库
  • 与云服务同步

开发者工具类应用

Electron 特别适合做这些:

  • 编辑器
  • API 调试工具
  • 聊天客户端
  • 知识管理工具
  • 内部业务客户端
  • 跨平台 SaaS 桌面端

✅ Electron 的优势

Electron 受欢迎,不是因为它最“轻”,而是因为它很实用

1. 前端团队上手快

如果团队已经会:

  • React
  • Vue
  • Next.js
  • TypeScript

那么迁移到 Electron 的学习成本不高。

2. 跨平台效率高

一套代码可以同时支持:

  • Windows
  • macOS
  • Linux

这对创业团队和小团队非常友好。

3. UI 开发效率高

桌面原生 UI 开发往往平台差异大,而 Electron 直接复用成熟 Web 技术栈:

  • CSS 布局
  • 组件化开发
  • npm 包生态
  • 前端构建工具

4. 生态成熟

Electron 周边工具很多,比如:

  • electron-builder:打包发布
  • electron-forge:工程脚手架
  • autoUpdater 相关方案:自动更新
  • 各类安全、安装包、签名工具

⚠️ Electron 的缺点

它很强,但也确实有几个经常被吐槽的问题。

1. 内存和体积偏大

因为每个应用基本都带着一套 Chromium 运行环境,所以:

  • 安装包通常不小
  • 内存占用往往比原生应用高

这也是 Electron 最常见的“群众批评点”。

2. 性能不一定最优

对于普通业务应用没问题,但如果是:

  • 高性能图形应用
  • 超低延迟系统工具
  • 极致资源受限环境

Electron 不一定是最佳选择。

3. 安全需要认真处理

因为它结合了:

  • Web 页面
  • 本地系统权限

如果安全策略做不好,风险会放大。
比如:

  • 不安全地加载远程内容
  • 开启不必要的 Node 集成
  • 没有隔离上下文
  • IPC 暴露过多能力

4. 原生体验有时不够“原生”

虽然能跨平台,但:

  • 细节交互不一定完全符合各平台习惯
  • 某些系统级控件体验不如原生框架自然

🧱 Electron 的典型项目结构

一个 Electron 项目通常会有这些部分:

主进程代码

例如:

  • main.js / main.ts

负责:

  • 创建窗口
  • 监听生命周期
  • 注册 IPC
  • 调用本地 API

预加载脚本

例如:

  • preload.js

它是安全桥梁,用来把有限、受控的能力暴露给渲染进程。

渲染进程代码

例如:

  • React / Vue 页面代码
  • HTML / CSS / JS

负责:

  • 页面展示
  • 用户交互
  • 调用暴露出来的 API

一个简化理解是:

部分作用
主进程管应用与系统能力
预加载脚本做安全桥接
渲染进程做页面与交互

这个结构是学 Electron 时最该先吃透的。


🚀 Electron 适合什么场景

Electron 尤其适合这些项目:

非常适合

  • 管理后台桌面版
  • SaaS 客户端
  • 文档/知识库工具
  • AI 桌面助手
  • 编辑器
  • 聊天客户端
  • 内部企业工具
  • API 调试工具

不太适合

  • 极度强调性能和内存占用的软件
  • 重度 3D / 图形引擎类桌面应用
  • 极强平台原生交互要求的系统级软件

🔄 Electron 和其他桌面方案的区别

常见对比可以这样看:

方案技术栈优点缺点
ElectronWeb + Node.js跨平台强、前端上手快、生态成熟包体积大、资源占用高
Tauri前端 + Rust 后端更轻、更省资源生态和开发习惯相对没 Electron 成熟
Flutter DesktopDartUI 一致性强Web 前端团队迁移成本高
QtC++ / QML性能强、原生能力强学习和开发成本较高
原生开发Swift / C# / C++ 等原生体验最好多平台开发成本高

实际选择时:

  • 前端团队快速做跨平台桌面 App:Electron 很合适
  • 追求更轻量:Tauri 常被拿来对比
  • 追求极致原生性能:Qt / 原生开发更强

🛡️ Electron 安全建议

这是 Electron 项目里非常关键的一部分。

建议优先遵守这些原则

  • 关闭不必要的 nodeIntegration
  • 开启 contextIsolation
  • 使用 preload 做受控 API 暴露
  • 谨慎加载远程页面
  • 对 IPC 通道做白名单控制
  • 对输入和文件操作做校验
  • 配置内容安全策略(CSP)

一句话就是:
把渲染进程当成“不完全可信”的环境来设计。


💡 Electron 的一句话理解

如果要非常通俗地讲:

Electron = 用前端技术做桌面 App 的主流方案。

它不是最轻的,也不是最原生的,
但它可能是对 Web 开发者最友好的桌面应用框架之一


✅ 核心总结

你可以记住这几个点:

  • Electron 是一个 跨平台桌面应用框架
  • HTML / CSS / JavaScript / TypeScript 就能开发桌面软件
  • 底层结合了 Chromium + Node.js
  • 适合快速做:
    • 工具类 App
    • SaaS 客户端
    • 编辑器
    • 企业内部系统
  • 优点是 开发快、跨平台、生态成熟
  • 缺点是 包大、内存高、性能不如原生

如果你是前端开发者,Electron 往往是进入桌面开发世界的最顺手入口。