You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Electron中require('electron')与require('electron').remote获取BrowserWindow的区别

关于Electron中两种获取BrowserWindow方式的区别

嘿,作为Electron新手,搞懂主进程和渲染进程的边界是入门的关键,我来给你理清楚这两种写法的核心差异:

1. 主进程直接使用require('electron')

  • 这是主进程专属的标准用法。Electron的主进程是应用的核心控制层,负责创建窗口、管理系统资源、处理原生能力调用等。BrowserWindow本身就是主进程的内置模块,直接通过const { BrowserWindow } = require('electron')获取,相当于直接调用本地模块,没有额外的通信开销,性能最优,也是官方推荐的主进程创建窗口的方式。

2. 渲染进程使用require('electron').remote

  • 渲染进程就是你窗口中加载的网页对应的运行环境,它本身没有权限直接访问主进程的API。remote模块的作用是在渲染进程和主进程之间搭建一个“通信桥”,让渲染进程可以间接调用主进程的模块。你通过remote拿到的BrowserWindow其实是主进程模块的“代理对象”——当你调用它的方法时,实际是通过IPC(进程间通信)把指令发送给主进程执行,再把结果传回渲染进程。

额外注意事项

  • 从Electron 14版本开始,remote模块默认被禁用了,如果要使用,必须在创建BrowserWindow时手动开启:
    const mainWindow = new BrowserWindow({
      webPreferences: {
        enableRemoteModule: true
      }
    })
    
  • 官方现在更推荐使用手动IPC通信来替代remote模块,因为remote会带来额外的IPC开销,而且容易因为不当使用造成内存泄漏,安全性也不如直接控制IPC消息来得可控。

内容的提问来源于stack exchange,提问作者Sébastien Temprado

火山引擎 最新活动