在 Electron 的多进程架构(主进程 + 渲染进程)中,global
对象 是主进程内全局变量的核心载体,用于存储跨窗口或模块共享的数据或服务。其设计类似于 Node.js 的全局对象,但在 Electron 中需特别注意进程边界和安全性限制。
global
的核心作用与使用场景主进程中的全局存储
global
仅在 主进程 中可用,用于保存需跨多个渲染进程访问的数据或服务。// 主进程中定义全局缓存
global.statusCache = new Map();
global.dbConnection = require('./database'); // 数据库模块
渲染进程的访问限制
global
,因其运行在隔离的 BrowserWindow 上下文中。// preload.js
const { contextBridge } = require('electron');
contextBridge.exposeInMainWorld('api', {
getCache: () => global.statusCache
});
渲染进程通过 window.api.getCache()
调用。避免滥用与内存泄漏
global
的对象常驻内存,需警惕未释放的引用(如闭包、事件监听器)。WeakMap
)。安全风险控制
global
到渲染进程会导致安全漏洞(如攻击者篡改核心逻辑)。contextBridge
按需暴露最小接口;nodeIntegration: false
和 contextIsolation: true
(默认配置)。进程间通信(IPC)替代方案
ipcMain
/ipcRenderer
通信而非全局变量:// 主进程
ipcMain.handle('get-data', () => global.data);
// 渲染进程
const data = await ipcRenderer.invoke('get-data');
全局状态管理
global.appConfig = { theme: 'dark', locale: 'zh-CN' };
共享服务实例
global.httpService = new AxiosInstance({ baseURL: 'https://api.example.com' });
调试工具集成
global
,便于主进程故障排查:if (process.env.NODE_ENV === 'development') {
global.debugTool = require('electron-debug');
}
global
的合理使用原则场景 | 推荐方案 | 风险提示 |
---|---|---|
主进程内跨模块共享数据 | global + 清理逻辑 |
内存泄漏风险 |
渲染进程需访问主进程数据 | 预加载脚本 + contextBridge |
安全暴露最小接口 |
实时数据同步 | IPC 通信 | 避免全局变量频繁读写 |
最佳实践:
- 主进程中用
global
管理生命周期稳定的资源(如配置、服务实例);- 渲染进程依赖数据通过预加载脚本封装或 IPC 动态获取;
- 开启 Electron 的安全配置项(如沙箱、上下文隔离)。