🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

为什么选 Electron

应用场景

Electron 能做什么

核心概念(技术要点)

安全注意事项(很重要)

Electron 的优势与局限

主要优势

实例

主要局限

权衡建议

与其它同类工具对比

性能与体积常见问题


img

Electron 是一个开源框架,把 Chromium(浏览器内核)+Node.js(服务器/系统能力) 包裹进一个桌面应用壳,让你用 HTML/CSS/JS 写跨平台的桌面程序(Windows、macOS、Linux)。

关键点:

  • 前端负责界面(Renderer 进程:像浏览器标签页)。
  • 主进程(Main)负责应用生命周期、窗口、原生 API 调用。
  • 两者通过 IPC(进程间通信) 交互。
  • 最终可打包成 .exe.app.deb 等安装文件。

Electron 由 GitHub 开发并维护,最初是为了构建 Atom 编辑器而创建的。

简单来说:Electron = Chromium + Node.js + Native APIs

  • Chromium:提供强大的渲染引擎,负责显示界面
  • Node.js:提供后端能力,可以访问文件系统、网络等
  • Native APIs:提供操作系统级别的功能,如菜单、通知、托盘等


为什么选 Electron

  • 上手快:Web 开发者可以复用大量前端技能/组件/生态(React/Vue/Angular/TS/CSS)。
  • 跨平台:写一次,构建三平台(虽然有系统差异需要调整)。
  • 强大的本地能力:直接访问文件系统、进程、系统 API,而不必写本地语言绑定(绝大多数场景靠 Node.js 就够)。
  • 生态成熟:大量现成库、模板、打包工具(Electron Builder / Forge 等)。
  • 适合工具类应用:编辑器、通信工具、生产力软件、调试工具等。

Electron 的设计理念是"一次编写,到处运行"(Write Once, Run Everywhere)。开发者只需要编写一套代码,就能生成 Windows、macOS 和 Linux 三个平台的应用程序。

核心优势:

  • 使用熟悉的 Web 技术栈开发桌面应用
  • 无需学习平台特定的开发语言(如 C++、Objective-C、Swift)
  • 统一的开发体验和代码库
  • 快速迭代和部署

应用场景

  • 开发工具 / 编辑器:代码编辑器、终端、调试器(如 VS Code、Postman)。
  • 即时通信/社交:聊天客户端(如 Discord、Slack)。
  • 跨平台桌面客户端:需要快速把 web 产品做成桌面版。
  • 原型与内部工具:公司内部运营工具、数据面板、管理台。
  • 对 UI/交互要求高但不极端性能敏感的应用

不适合的场景:对 CPU/GPU/内存极度敏感、需要极致原生体验或移动端优先的项目(如大型图形渲染、超低延迟游戏)。


Electron 能做什么

  • 打开窗口、菜单、系统托盘、通知(系统通知)。
  • 读写文件、操作本地数据库(SQLite、LevelDB 等)。
  • 调用本机命令/二进制、启动子进程。
  • 使用原生对话框(打开/保存文件)、剪贴板、拖拽、全局快捷键。
  • 实现自动更新(auto-update)、热重载、打包分发。
  • 加载本地或远程网页,支持现代 Web 技术(WebGL、WebRTC 等)。
  • 集成原生模块(C++/Node Native Addons),接入硬件或系统功能。

核心概念(技术要点)

  • Main 进程:Electron 的入口,负责创建 BrowserWindow、管理应用生命周期与原生 API。运行单实例(Node 可用)。
  • Renderer 进程:每个 BrowserWindow 对应一个 renderer,运行网页(Chromium),不直接访问 Node(可通过 preload 暴露受限 API)。
  • Preload 脚本 & contextIsolation:推荐用 preload 在 renderer 中注入受限 API,开启 contextIsolation 提高安全性。
  • IPC(ipcMain / ipcRenderer / contextBridge):主、渲染进程通信机制。
  • 打包工具:Electron Builder / Electron Forge / electron-packager 等,用于生成安装包与自动更新。
  • Auto-updater:实现应用自动升级(需服务端/发布配置)。

安全注意事项(很重要)

  • 永远不要在 renderer 中直接开启 NodeIntegration(nodeIntegration: true,默认关闭以防 XSS 导致任意系统命令执行。
  • 使用 contextIsolation + preload + contextBridge 暴露最小、受控的 API。
  • 对外部内容(远程 URL)进行严格校验 / 沙箱处理。
  • 对文件路径、shell 命令等输入做严格校验,避免命令注入。
  • 尽量使用 CSP、禁用 eval、避免不受信任的第三方脚本。

Electron 的优势与局限

主要优势

1. 跨平台开发的便利性

使用 Electron,开发者可以用同一套代码库生成 Windows、macOS 和 Linux 三个平台的应用:

实例

// 同一套代码可以在三个平台运行
const { app, BrowserWindow } = require('electron');

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  });
 
  win.loadFile('index.html');
}

app.whenReady().then(createWindow);

节省的成本:

  • 无需维护三套代码库
  • 团队不需要掌握多种平台开发技术
  • 统一的测试和部署流程
  • 更快的功能迭代速度

2. Web 技术栈的优势

  • 丰富的生态系统:npm 上有数百万个包可用
  • 成熟的框架:可以使用 React、Vue、Angular 等现代前端框架
  • 开发效率高:热重载、DevTools、丰富的调试工具
  • 人才储备充足:Web 开发者数量庞大,招聘容易
  • 快速原型开发:利用现有的 Web 组件和库

3. 强大的功能支持

  • 完整的 Node.js 能力(文件系统、网络、进程等)
  • 原生桌面功能(菜单、通知、系统托盘等)
  • 自动更新机制
  • 硬件访问能力(摄像头、USB 设备等)
  • 离线工作能力

4. 活跃的社区和生态

  • 官方文档完善
  • 大量开源项目可供参考
  • 丰富的第三方工具和库
  • 活跃的社区支持

主要局限

1. 性能开销

Electron 应用需要同时运行 Chromium 和 Node.js,这带来了额外的性能开销:

  • 内存占用:空白的 Electron 应用通常占用 50-100MB 内存
  • CPU 使用:渲染引擎和 JavaScript 执行相比原生应用效率较低
  • 启动时间:相比原生应用,启动时间较长

对比示例:

  • 原生应用:10-30MB 内存,启动 < 1 秒
  • Electron 应用:80-200MB 内存,启动 2-5 秒

2. 安装包体积大

每个 Electron 应用都需要打包完整的 Chromium 和 Node.js 运行时:

  • Windows:~50-70MB(未压缩)
  • macOS:~60-80MB(未压缩)
  • Linux:~55-75MB(未压缩)

这意味着即使是简单的应用,安装包也不会小于 50MB。

3. 安全性考虑

由于 Electron 同时拥有浏览器和 Node.js 的能力,如果配置不当,可能存在安全风险:

  • XSS 攻击可能导致系统级权限被利用
  • 需要仔细配置上下文隔离和沙箱
  • 第三方依赖的安全问题

4. 原生体验差异

虽然可以模拟原生界面,但在某些方面仍有差异:

  • 无法完美复制系统原生控件
  • 某些系统级功能难以实现
  • 平台特定的交互习惯需要额外处理

权衡建议

选择 Electron 的决策因素:

因素 权重 说明
开发效率 如果团队有 Web 经验,Electron 效率最高
跨平台需求 需要支持多平台时,Electron 是优选
性能要求 除非极致性能场景,一般应用可接受
包体积敏感度 现代网络环境下,50-100MB 可接受
安全性要求 需要严格遵循安全最佳实践

与其它同类工具对比

如果你是前端/全栈开发者,需要快速把 Web 产品或工具交付到桌面、并能直接使用系统能力,Electron 是极高产、门槛低的选择;但若你对体积、内存或极致原生体验有严格要求,应考虑像 Tauri、Flutter 或原生框架作为替代。

  • Tauri

    • 核心:Rust + 系统自带 WebView(WebView2 / WebKit)
    • 优点:体积小、内存占用低、安全性好、适合注重轻量与性能的应用。
    • 适合:想用 web 技术但要极致小体积或性能敏感的桌面应用。
    • 对比:如果你想快速复用 Node.js 生态,Electron 更方便;若追求小体积,选 Tauri。
  • NW.js

    • 跟 Electron 起源相似(也是 Chromium + Node),API 风格不同。
    • Electron 社区与工具更活跃。
  • Neutralino

    • 极轻量,使用系统 WebView,功能比 Electron 少。
    • 更适合简单工具或小型桌面应用。
  • Flutter Desktop

    • 使用 Dart/Flutter 渲染,原生表现好、界面一致性高。
    • 适合需要统一跨平台 UI/性能的项目,但要重学 UI 框架(不是 web 技术)。
  • React Native for Windows/Mac / .NET MAUI / Qt

    • 更原生的桌面开发路线,适合对系统集成、性能、原生体验有高要求的项目。

选择建议:

  • 想迅速把 Web 产品转桌面、或团队主要是 Web 前端 -> Electron
  • 想要小体积/更低资源占用 -> Tauri/Neutralino
  • 追求原生 UI & 高性能 -> Flutter/Native/Qt

性能与体积常见问题

  • 打包时开启 asar 可合并资源(注意 native 模块兼容)。
  • 使用懒加载、减少初始渲染资源,尽量减少主窗口加载的重资源。
  • 避免在 renderer 中执行大量 CPU 密集任务,改用 子进程 / worker / native module
  • 使用 single instance、开启硬件加速或禁用视情况调整。
  • 优化依赖:减少不必要的 npm 包,避免引入巨大前端库(或用按需加载)。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐