Victor's blog

Stay hungry, stay foolish.

0%

ElectronJs中backdrop-filter的性能问题

最近收到反馈说electronJs的APP里面有个性能问题,在打开弹窗时非常容易复现,但是此前的版本似乎又没有这个问题,本来着急发版,没打算解决这个问题,今天任务提前完成,总算腾出了一点时间来Google…😅


问题表现

应用中的svg里面有很多rect元素,在鼠标快速滑动时发现应用:hover样式时有一些延时,Ctrl+R刷新界面无法改善,必须重启APP才正常,找了很久都没找到原因,最后在dev tool里面取消模态窗体遮罩层的backdrop-filter竟然瞬间好了,于是开始Google+ChatGPT…

为什么backdrop-filter性能这么差?

首先请教一下ChatGPT,给我的答复:

backdrop-filter 会对元素后面的内容进行模糊或颜色变化等效果处理,这需要浏览器在渲染时进行额外的计算。具体原因如下:

  • 重绘频率高:每次页面内容变化时,backdrop-filter 都需要重新计算和重绘,这会增加CPU和GPU的负担。
  • 复杂的图像处理:模糊和其他滤镜效果需要对像素进行复杂的计算,尤其是在高分辨率屏幕上,这会显著增加计算量。
  • 硬件加速:虽然现代浏览器会尝试使用GPU加速这些效果,但在某些情况下,硬件加速可能并不总是有效,导致性能瓶颈。

如何改善?

看到“硬件加速”几个字,我突然想到我之前几个版本里面禁用了硬件加速——因为我发现ElectronJS在默认情况下就有一点模糊,最后发现是默认启用了硬件加速导致的。

于是我把app.disableHardwareAcceleration()注释掉然后重启,居然正常了!但同时APP又变得有点糊,目前还不知道有什么办法可以优化这个问题,只能暂时忽略了。