Skip to content

Slow startup and UI freezing issue analysis / 启动慢、界面卡顿问题分析 #7225

Description

@82030615

问题描述 / Problem Description

Orca 在 Windows 上启动很慢(约 8.5 秒),界面时不时卡住并显示未响应。

Orca starts very slowly on Windows (about 8.5 seconds), and the UI occasionally freezes and shows "Not Responding".

启动日志分析 / Startup Log Analysis

通过设置 ORCA_STARTUP_DIAGNOSTICS=1 环境变量捕获启动日志,发现以下时间线:

By setting the ORCA_STARTUP_DIAGNOSTICS=1 environment variable to capture startup logs, the following timeline was found:

t=763     app-ready
t=773     store-loaded (27KB, 0ms read)
t=1106    services-initialized (+333ms)
t=1152    window-created
t=7455    load-start (+6303ms ← Major bottleneck!)
t=8244    event-loop-stall maxGapMs=7395 ← UI freezing cause
t=8506    ready-to-show (Total startup 8.5 seconds)
t=135583  did-finish-load (Page load complete)
t=135596  event-loop-stall maxGapMs=127146 ← Main thread blocked for 127 seconds
t=135890  renderer-startup-chain-start

根本原因 / Root Cause

  1. 主线程被阻塞 128 秒 - 从 loadMainWindow 调用后,主线程还在执行大量同步代码(第 806-972 行),导致渲染进程的 JavaScript 无法执行。

    Main thread blocked for 128 seconds - After loadMainWindow is called, the main thread is still executing a large amount of synchronous code (lines 806-972), causing the renderer process's JavaScript to be unable to execute.

  2. 渲染进程启动链串行执行 - 12+ 个 IPC 调用依次执行。

    Renderer startup chain executes serially - 12+ IPC calls execute sequentially.

阻塞主线程的操作 / Operations Blocking the Main Thread

window-createdload-start 之间(第 781-973 行),有大量同步操作:

Between window-created and load-start (lines 781-973), there are many synchronous operations:

  1. registerCoreHandlers (第 806-833 行) - 注册 40+ 个 IPC 处理程序
    Register 40+ IPC handlers

  2. automations.start() (第 835 行) - 启动自动化服务
    Start automation service

  3. attachMainWindowServices (第 836-853 行) - 注册更多 IPC 处理程序
    Register more IPC handlers

  4. rateLimits.start() (第 858 行) - 启动限速服务
    Start rate limiting service

  5. createSystemTray (第 882-896 行) - 创建系统托盘
    Create system tray

  6. agentHookServer.setListener (第 901-954 行) - 设置事件监听器
    Set event listeners

解决方案建议 / Proposed Solutions

方案 1:将非关键操作移到 loadMainWindow 之后 / Move non-critical operations after loadMainWindow

将不影响首屏渲染的操作延迟到页面加载完成后执行:

Defer operations that don't affect first-screen rendering until after page load:

  • 系统托盘创建 / System tray creation
  • 限速服务启动 / Rate limiting service startup
  • 非关键 IPC 处理程序注册(如 GitHub、GitLab、Linear、Jira 等)
    Non-critical IPC handler registration (e.g., GitHub, GitLab, Linear, Jira, etc.)

方案 2:并行化渲染进程启动链 / Parallelize renderer startup chain

将独立的 IPC 调用并行执行:

Execute independent IPC calls in parallel:

// 原先串行执行 / Originally serial execution
await fetchSettings()
await fetchRepos()
await fetchProjectGroups()
await fetchWorktrees()
// ...

// 改为并行执行 / Changed to parallel execution
await Promise.all([
  fetchSettings(),
  fetchRepos(),
  fetchProjectGroups(),
  fetchWorktrees(),
  // ...
])

方案 3:延迟加载非关键 IPC 处理程序 / Lazy load non-critical IPC handlers

只注册首屏必需的 IPC 处理程序,其他处理器按需加载:

Only register IPC handlers required for first screen, load others on demand:

首屏必需 / Required for first screen:

  • settings:get
  • repos:getAll
  • projectGroups:getAll
  • folderWorkspaces:getAll
  • worktrees:getAll
  • worktreeLineage:get
  • ui:get
  • session:get
  • keybindings:get
  • browser:getSessionProfiles
  • onboarding:get

可延迟加载 / Can be lazy loaded:

  • github:* (GitHub 相关 / GitHub related)
  • gitlab:* (GitLab 相关 / GitLab related)
  • linear:* (Linear 相关 / Linear related)
  • jira:* (Jira 相关 / Jira related)
  • feedback:* (反馈相关 / Feedback related)
  • stats:* (统计相关 / Statistics related)
  • 等等 / etc.

预期效果 / Expected Results

  • 启动时间从 8.5 秒减少到 2-3 秒 / Startup time reduced from 8.5 seconds to 2-3 seconds
  • 界面不再显示未响应 / UI no longer shows "Not Responding"
  • 渲染进程启动链更快执行 / Renderer startup chain executes faster

环境信息 / Environment Information

  • Orca 版本 / Version:1.4.119
  • 操作系统 / OS:Windows 10 Pro 10.0.19045
  • 启动参数 / Launch args:--disable-gpu --disable-gpu-compositing --disable-gpu-sandbox

附件 / Attachments

启动日志文件已保存到 orca-startup.log

The startup log file has been saved to orca-startup.log.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions