当前位置: 首页 > news >正文

electron基础

进程简介

electron有一个mian主进程和多个渲染进程(渲染进程至少有一个)
其中主进程与渲染进程需要preload进行通信。

preload是渲染进程与主进程进行通信的桥梁
主进程:控制应用生命周期,负责创建渲染进程,仅有一个。
渲染进程:每个窗口对应一个独立进程,支持Node.js和DOM API,数量可动态扩展。

ipc与webContents通信

renderer渲染进程通过ipc主动与主进程进行通信;
ipcRenderer.send(channel, …args) 是异步的,用于从渲染进程向主进程发送消息。它发送消息后不会等待主进程的响应,而是立即返回,适合在不需要等待主进程响应的情况下发送消息。

ipcRenderer.invoke(channel, …args) 是同步的,也是用于从渲染进程向主进程发送消息,但是它会等待主进程返回响应。它会阻塞当前进程,直到收到主进程的返回值或者超时。

ipcRenderer.sendSync(channel, …args) 是用于从渲染进程向主进程发送消息,但是它是一个异步的方法,可以方便地在渲染进程中等待主进程返回 Promise 结果。相对于 send 和 sendSync,它更适合处理异步操作,例如主进程返回 Promise 的情况。

mian主进程通过webContents主动与renderer渲染进程进行通信

MessagePort可以实现渲染进程与渲染进程通信,不需要中间桥梁
在这里插入图片描述

preload:

  1. contextBridge - 安全桥接:
    contextBridge.exposeInMainWorld(),它把底层API包装成渲染进程可以直接调用的方法。
    安全性:只暴露我们需要的API,避免暴露整个Node.js环境
    可控性:我们可以对API进行包装和验证
    类型安全:可以为暴露的API提供TypeScript类型定义

  2. ipcRenderer - 进程间通信
    ipcRenderer是渲染进程用来与主进程通信的模块:
    ipcRenderer.invoke() - 发送请求并等待响应(异步)
    ipcRenderer.on() - 监听主进程发送的消息
    ipcRenderer.send() - 发送消息给主进程(不等待响应)

  3. 通信流程
    整个通信流程是这样的:
    渲染进程 → preload → ipcRenderer → 主进程 → ipcMain → 底层API
    底层API → ipcMain → 主进程 → ipcRenderer → preload → 渲染进程

mian主进程API

requestSingleInstanceLock() 单实例锁

单例锁(Singleton Lock)的实现主要用于确保应用程序在系统上只有一个实例运行。这对于桌面应用程序来说非常有用,尤其是在用户可能通过多种方式(如直接打开文件、从快捷方式等)启动应用程序时。

单实例锁的核心价值
在桌面应用开发中,多实例运行常常带来意想不到的问题:
配置文件冲突:多个进程同时读写设置导致数据损坏
文件锁定竞争:同一文件被多个窗口编辑造成内容覆盖
系统资源浪费:重复加载大型绘图组件导致内存占用激增
在这里插入图片描述

Mian主进程的index.ts根文件注册如下命令

app.commandLine.appendSwitch('disable-site-isolation-trials')

作用:禁用 Chromium 的站点隔离功能
用途:提升性能,特别是在资源受限的环境中

app.commandLine.appendSwitch('wm-window-animations-disabled')

作用:禁用窗口管理器的动画效果
用途:提升应用程序的响应速度,减少视觉延迟

app.commandLine.appendSwitch('disable-web-security')

作用:关闭同源策略(Same-Origin Policy)
用途:允许跨域请求,便于开发和测试

app.commandLine.appendSwitch('no-sandbox')

作用:关闭 Chromium 的沙盒安全机制
用途:解决在某些 Linux 环境或 Docker 容器中的兼容性问题

app.commandLine.appendSwitch('high-dpi-support', 'true')

作用:优化高分辨率显示器的显示效果
用途:确保在高 DPI 屏幕上文字和界面元素清晰显示

http://www.dtcms.com/a/582378.html

相关文章:

  • 用中文版wordpress建英文站企业网站建设有哪些
  • 什么是CPU分支预测?
  • AI 技术助力汽车美容行业实现精细化运营管理
  • C语言应用实例:硕鼠游戏,田忌赛马,搬桌子,活动选择(贪心算法)
  • python+django/flask的医院财务管理系统
  • 网站开发常用框架电子商务网站建设的方法有哪些
  • 如何挑选出色的展厅机器人
  • 那种退不掉的网站怎么做的wordpress代码块
  • 锁机制详解:公平锁与非公平锁
  • 用vs2010做网站教程哪里网站建设便宜
  • 广州专业制作网站杭州网络优化公司排名
  • 建信建设投资有限公司网站网络营销品牌推广
  • asp 网站卡死多层次网络营销合法吗
  • 网站建设项目资金申请报告策划书的推广与运营
  • 网站开发可选择的方案学做立体书的网站
  • 网站建站流程网页设计制作页面
  • 基于SMPC随机模型预测控制的IEEE6电网系统matlab仿真,对比不允许负荷响应和允许负荷响应
  • 2025山西省网络安全职业技能大赛PWN方向题解
  • 郑州网站建设技术精粹一站式网站建设架构
  • 2025 年世界职业院校技能大赛机械设计与制造赛道备赛方案
  • 【2025软考高级架构师】——2024年11月架构真题解析
  • 基于HAL库实现看门狗喂狗实时时钟睡眠停止模式ADC采集w25qx写入读取
  • Linux系统编程——多线程编程(一)
  • 建设钓鱼网站源码网站seo优化心得
  • 关方网站买微信我们做网站 出教材 办育心经
  • python+django/flask基于深度学习的个性化携程美食数据推荐系统
  • VRRP虚拟路由冗余
  • 嵌入式软件OTA升级,有哪几种FLASH划分方式?
  • wordpress 投稿者 权限厦门做网站seo
  • 玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为