Electron 基础知识点

66 阅读2分钟

🧠 核心架构与进程机制

主进程 vs 渲染进程

  • 主进程负责控制应用生命周期、窗口管理等核心功能。
  • 渲染进程是每个 BrowserWindow 内的 Web 页面环境,运行 HTML/CSS/JS。
  • 通信方式:
    • 使用 ipcMainipcRenderer 模块进行双向异步通信。
    • 推荐使用 contextBridgepreload 脚本增强安全性。

contextBridge 的安全通信

  • 通过 contextBridge.exposeInMainWorld 暴露 API 给渲染进程。
  • 避免直接访问 Node.js API,提高安全性,防止原型污染。

remote 模块的弃用

  • 原因:存在安全隐患和性能问题。
  • 替代方案:使用 IPC 通信或构建服务层,让渲染进程通过安全接口调用主进程功能。

⚙️ 性能优化与资源管理

启动与内存优化

  • 使用懒加载方式加载窗口内容。
  • 开启 backgroundThrottling 控制后台窗口性能。
  • 减少模块依赖和优化打包资源体积。

避免主线程阻塞

  • 将耗时操作放入渲染进程或使用子进程。
  • 利用 worker_threadschild_process 模块处理 CPU 密集任务。

使用 webContents 与 session 管理资源

  • webContents.getResourceUsage() 监控内存和 CPU。
  • session 可用于缓存、cookie 管理和拦截请求。

🔐 安全性与权限控制

防止 XSS 和 CSRF

  • 启用 CSP(内容安全策略)限制加载源。
  • 禁用不信任的协议和外部脚本。
  • 所有输入数据做严格验证与转义。

sandbox 模式配置

  • BrowserWindow 中设置 sandbox: true
  • 渲染进程无法访问 Node.js,全靠 contextBridge 提供接口。
  • 更适合多窗口和 Web 内容隔离的场景。

禁用 Node.js 集成

  • 配置 webPreferences.nodeIntegration = false
  • 避免渲染进程调用敏感模块,提升整体安全等级。

📦 打包与自动更新

打包工具对比

工具优点缺点
electron-builder自动更新支持好,配置简洁依赖较多
electron-packager简单易用,灵活自动更新支持弱

electron-updater 流程

  1. 配置 publish 字段指向更新服务器。
  2. 在主进程中引入 autoUpdater,监听更新事件。
  3. 渲染进程通知用户下载与安装。

代码签名与版本控制

  • macOS 需使用 Developer ID 签名。
  • Windows 需使用 Authenticode 或 DigiCert。
  • 利用 Git 或 CI 工具控制版本发布节奏。

🧪 测试与调试

使用 Spectron 测试

  • 基于 WebDriver 和 Mocha,测试 Electron UI 行为。
  • 可模拟用户操作和验证窗口状态。

VS Code 调试技巧

  • 设置 launch.json 分别调试主进程和渲染进程。
  • 利用 --inspect 参数开启调试端口。

崩溃报告与分析

  • 利用 crashReporter 模块收集崩溃信息。
  • 配合 Sentry 或类似平台做堆栈追踪和错误聚合。

🧩 实战经验题

多窗口管理

  • 使用 BrowserWindow 实例管理多个窗口。
  • 使用 IPC 或 window.postMessage 实现跨窗口通信。

与前端框架集成

  • Vue/React 可通过 create-react-appvite 构建。
  • 注意禁用 Node.js 集成,避免 Web 安全问题。
  • 前后端通信通过 preload.jscontextBridge 完成桥接。