桌面端|Electron 几个开发调试小技巧

上文讲了桌面端|Electron BrowserView 多容器管理(内附 Demo),有同学在私信中问到如何开启 Tab 页内容调试窗口,这里刚好整理一篇笔者用的小技巧来应对,当然一个小技巧撑不起一篇文章,那就要多几个[手动狗头]。

技巧一:视图调试

背景

在之前只有一个BrowserWindow调试页面时,默认会在开发时打开该页面的开发调试工具(chrome dev tools)。

但在使用多视图布局框架后,一个BrowserWindow会存在多个BrowserWindow,且一个 BrowserWindow会有多个 BrowserView 加载各个 URL 页面的情况:

如果是和以前一样,在开发时都打开,那满界面都是 devTools,类似下图:

一是多的乱七八糟,二是一旦关错了,那就只能重新启动来进行调试了。

如果默认都关闭,靠开发修改代码的方式打开,找到代码开启位置也是十分麻烦的,特别对打包给测试的包,想要调问题也很难。

虽然我们也有 cmd + shift + i 来打开调试窗口,但它只针对当前焦点的窗口,而不能打开其中 BrowserView 的调试窗口。

解决方案

默认都不开启 dev tools。

开启调试方式:

先选中你要 Debug 的视图

快速点击三下键盘左侧的 control 按键

相关代码

Typescript 复制代码
export function startDevToolsIfNeed(webContents: WebContents) {
    if (!app.isPackaged || ServiceManager.shared.backendEnvService.env !== 'prod') {
        let clicks = 0;
        let previousClickTime = 0;
        webContents.addListener('before-input-event', (_event, input) => {
            if (input.type === 'keyDown' && input.code === 'ControlLeft') {
                const now = +new Date();
                if (now - previousClickTime < 300) {
                    clicks++;
                } else {
                    clicks = 1;
                }
                previousClickTime = now;

                if (clicks >= 3) {
                    webContents.openDevTools({
                        mode: 'detach',
                        activate: true,
                    });
                    webContents.devToolsWebContents?.focus();
                    clicks = 0;
                }
            }
        });
    }
}

用法也很简单,把上面的方法注册给BrowserView容器或者BrowserWindow窗口即可。

(已经提交到 Demo 源码工程

技巧二:主进程调试

官方其实有详细的说明: 调试主进程

这里简单讲一下实现方式

步骤

1. 配置 inspect 端口打开

在 scripts/package.json 中,配置

electron --inspect=5858 .

运行 yarn start

2. 配置 chrome ,让其可以读取到 inspect 端口

a. 打开 chrome 浏览器

b. 输入chrome://inspect

c. 配置端口,增加 localhost:5858

d. 点击选择下方node进程进行调试,可增加断点,和 Web 一样调试。

技巧三:进程分析

背景

用了多视图方案后,尤其要关注进程和内存问题,这一点可能是很多前端同学所缺失的。因为一不留神,可能就把BrowserView容器持有了,进程销毁不掉,导致内存越用越多。

当然也不是嘲讽前端同学,笔者刚开始做 Electron 开发多容器时,也遇到很多进程没有释放的场景。

解决进程没有释放的前提是,先要能发现到进程没有释放的问题。

分析方式

Windows:任务管理器。

Mac:活动监视器。

以 Mac 为例:

Debug 模式下,查询进程名称为:Electron 的进程。

打包后,进程查询为你当前应用的名称。

这里可以看到多个进程,简单分析一一下:

窗口占用每个窗口会占用一个处理进程(Helper)和一个渲染进程(Renderer)。

容器占用每个容器只会占用一个渲染进程(Renderer)。


感谢阅读,如果对你有用请点个赞 ❤️

相关推荐
爱吃的强哥7 小时前
Springboot 使用 SSE推送消息到客户端(Electron)
java·spring boot·electron
寒季66615 小时前
Electron 实战:构建跨平台桌面端 Markdown 编辑器(含实时预览、文件操作、快捷键)
华为·electron·harmonyos
Jiangnan_Cai2 天前
【Electron】Windows 下打包遇到 dist/unpacked 文件内 electron.exe 文件缺失问题
前端·javascript·electron
自不量力的A同学2 天前
Electron 40.0.0 发布,跨平台桌面应用开发工具
前端·javascript·electron
michael_ouyang2 天前
WebSocket 鉴权方案选型与 Electron 应用的最佳实践
前端·websocket·网络协议·electron
写bug的可宋5 天前
【Electron】解决Electron使用阿里iconfont不生效问题(react+vite)
javascript·react.js·electron
方白羽7 天前
Android 开发中,准确判断应用处于“前台(Foreground)”还是“后台(Background)
android·app·客户端
凉介Nova7 天前
Electron 应用体积从 190MB+ 到 90MB:一次「release 目录反推」的瘦身实战(electron-builder + Vite)
electron
winfredzhang7 天前
零基础打造轻量级桌面备忘录:Electron 核心技术实战
前端·javascript·electron·备忘录
放逐者-保持本心,方可放逐7 天前
electron 中的那些事(很关键)-核心要点补充
前端·javascript·electron