Repository navigation
Replies: 1 comment
更新:补一份「启动之后还慢在哪」的实测(同一台机器、225 个插件)接着上面的现象往下追了一步:窗口能出来了,但从窗口出现到真正能打字,中间还有肉眼可见的空档。这份是这段时间攒下来的数据,供参考。 环境:Desktop 0.2.1-rc.2 / win32-x64 / Windows,约 225 个插件,同一账号配置;探针挂主线程计时( 1. 找到一处具体来源:usage 轮询每次同步重读整份配置
第三方插件
这条不只对 2. fibers 全 active 之前的 5.4 s,98% 是 Node 模块解析首次全 active 出现在 +6.7 s;之前的停顿集中在三段:workspace 2.38 s、schedule 2.78 s、session-projection-cache 0.71 s。把这 5.39 s 按 syscall 拆开:
涉及约 660 个包的入口解析。把安全软件暂停后只快约 40%,所以不是 fs 过滤的问题,是解析次数本身。 3. 单插件成本抽样(首次 apply)核心合计 15.0 s;第三方合计 ≈2.9 s,头部三个分别是 833 ms / 710 ms / 378 ms。按这个分布,即使把第三方插件全关也只省约 1 s——瓶颈不在"插件多"。 4. 仍然没解释的部分
5. 方法学上的诚实说明上面第 1 条的收益来自只有 1 次热启动的样本;active 之前变快大概率是热启动(文件缓存 + V8 code cache),不能算补丁功劳。用户侧的主观感受仍是"提升不大"——所以我倾向于先把十次以上冷启动的基线打实,再谈优化。 如果需要,我可以把探针整理成一个可复现的最小脚本贴上来(主线程占用计时 + 阶段归因 + syscall 分类,只依赖 |
Uh oh!
There was an error while loading. Please reload this page.
环境
现象
双击图标后,桌面和任务栏上长时间不出现任何窗口,没有 splash、没有进度、没有任何提示。用户无法判断是在启动还是卡死了,于是反复点图标——任务管理器里能看到一长串进程,"点很多次才打得开 + 后台起了一堆进程"。
根因:已配置用户启动时,主窗口要等页面加载完才 show,而欢迎窗口不会出现
resources/app.asar→lib/main.js(0.2.1-rc.2):也就是说:
needsWelcome返回 false,直接走enterWorkspace(),而它第一件事是await navigateMain(),在页面加载完成之前主窗口一直是隐藏的;second-instance→focusPrimaryWindow,但enteredWorkspace还是 false,于是直接 return:不显示、不聚焦、不提示。实测时间线
用自制的 cordis 探针(监听
internal/plugin事件 + 20ms 采样事件循环 lag)测到的:RECOVER)navigateMain返回 → 才window.show()而且插件全部就绪之后,主线程还有 4 次明显长卡(此时没有任何插件在 apply,
loading=[none]):累计 19 秒,正好落在用户反复点图标的那段时间里——即使窗口提前显示了,这段时间界面也会是卡死的。
建议
show(),内容区先渲染一个 skeleton / "正在启动…" 的本地占位页,等navigateMain完成再切真实页面。宁可先给一个空白窗口,也比"什么都没有"强得多。focusPrimaryWindow在!enteredWorkspace时不要再静默 return:至少window.show()出来(哪怕还是占位页),或者闪烁任务栏,让用户知道程序活着。loading=[none]长卡如果也能 profile 掉就更好了,它们在启动完成后直接表现为界面卡顿。备注
以上是本机实测 + 直接读
app.asar内lib/main.js得出的,行号对应 0.2.1-rc.2。如果这是已知问题或者不该在这里提,抱歉打扰。All reactions