electron loadFile/loadURL 耗时很长问题分析

项目场景:

项目中需要展示个人信息窗口 或打开图片查看器等 需要创建独立窗口的业务


问题描述

目前Electron的开发者很多都遇到这个问题,并且Issue中也有很多人提过问题,创建并显示一个BrowserWindow很慢,在一些低配机型上往往需要2秒或者更长的时间,这个问题使得很多需要用子窗口时,都用HTML DOM模拟。然而,Dom模拟的窗口必须在父窗口容器内,是没办法脱离父窗口存在的。所以还得解决BrowserWindow loadURL慢的问题。

let win = new BrowserWindow(...)
      ​
win.loadURL('http://localhost:8080/#/index')

 


原因分析:

electron Issue中也收录了该问题 ,但问题至今没有修复

https://github.com/electron/electron/issues/32375icon-default.png?t=M4ADhttps://github.com/electron/electron/issues/32375https://github.com/electron/electron/issues/32882icon-default.png?t=M4ADhttps://github.com/electron/electron/issues/32882

引用其他开发者的分析:BrowserWindow之所以慢,主要是两个问题导致的,第一个就是Electron内部在创建BrowserWindow对象时做了很多初始化工作,如果你要让渲染进程拥有Node的能力的话,那么它还会给你初始化一个Node的环境。第二个是对于一个全新的BrowserWindow对象来说首次加载并渲染HTML页面比较慢;最主要的还是第二个原因。


解决方案:

窗口池, 提前创建隐藏窗口并加载页面

窗口池就是一个数组

首先初始化窗口池,创建几个备用窗口(内存占用过大,不要创建太多)

let windowArr = []

for (let i = 0; i < 5; i++) {
    windowArr .push(createWindow ())
 }

const createWindow = () => {
	return new BrowserWindow(...)
}

当需要用到窗口时,从窗口池内取出,并删除该实例,同时补充窗口池

隐藏的窗口可以loadURL空白页面,本人项目中使用了vue,所以在用窗口池时,执行路由跳转即可

创建Electron窗口慢的应对方案:窗口池(一) - 知乎icon-default.png?t=M4ADhttps://zhuanlan.zhihu.com/p/446109389

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值