Priority: P2
Category: performance, core
Parent: #3011
Depends on: Lazy tool registration sub-issue (establishes lazy loading pattern)
Problem / 问题
Heavy dependencies loaded eagerly at startup but used much later or conditionally:
- OpenTelemetry SDK (~500KB): only when telemetry enabled
- highlight.js/lowlight (~300KB): only when rendering code
- web-tree-sitter + WASM (~100KB): only for shell parsing
- React + Ink: only for interactive mode
- Channel packages (telegram/weixin/dingtalk): only in channel mode
重型依赖启动时全量加载,但使用时机远晚于启动或仅在特定条件下使用。
Proposed Solution / 方案
Convert static imports to dynamic import():
| Dependency |
Current |
Target |
| OpenTelemetry SDK |
Static via barrel |
import() when telemetry enabled |
| highlight.js |
Static in CodeColorizer |
import() on first code render |
| web-tree-sitter |
Static import wrapper |
import() on first parse call |
| React + Ink |
Static in gemini.tsx |
import() only in interactive mode |
| Channel packages |
In dependency graph |
import() only in channel mode |
Reference: Claude Code defers OpenTelemetry (~400KB + protobuf), gRPC exporters (~700KB), React components to first use.
Acceptance Criteria / 验收标准
Problem / 问题
Heavy dependencies loaded eagerly at startup but used much later or conditionally:
重型依赖启动时全量加载,但使用时机远晚于启动或仅在特定条件下使用。
Proposed Solution / 方案
Convert static imports to dynamic
import():import()when telemetry enabledimport()on first code renderimport()on first parse callimport()only in interactive modeimport()only in channel modeReference: Claude Code defers OpenTelemetry (~400KB + protobuf), gRPC exporters (~700KB), React components to first use.
Acceptance Criteria / 验收标准
-p,--stream-json)