需要优化一下大repo的性能 #2

Closed
opened 2026-04-07 09:28:04 +00:00 by fam · 2 comments
Owner

生产环境有人上传了一个claude code源代码。我看,全局视图挺慢的,我们不能lazy load资源么?

而且,块块的字体很大,不对劲

image.png

生产环境有人上传了一个claude code源代码。我看,全局视图挺慢的,我们不能lazy load资源么? 而且,块块的字体很大,不对劲 ![image.png](/attachments/92ce13f5-2214-4b81-a320-a7748cea9783)
499 KiB
Author
Owner

@ms 帮忙看一下

@ms 帮忙看一下
Owner

PR 开好了:#5


分析了两个问题,都动刀了:

字体太大Math.min(leaf.w, leaf.h) * 0.15 没有上限,大 tile 直接算出 20+ world units 的字号。加了个 Math.min(..., 5) 的 cap,一行搞定。

全局视图慢 — 根因是两处叠加:

  1. 服务端把所有文件 content 塞进初始 JSON 一次性下发(claude code 这种大 repo 轻松几十 MB)
  2. load() 里对每个文件同步跑 computeColorRanges(highlight.js),几百个文件直接把主线程卡死

改法:

  • 服务端初始响应改成 metadata only,新增 GET /api/repos/{key}/file?path=... 按需拉单文件内容(cache 里内容还在,不影响任何逻辑)
  • 前端 _showCode() 发现 content 为空就异步 fetch,拿到之后再计算 colorRanges,loading 标志防重复请求

Rust 编译通过无报错,3 个文件改动。

PR 开好了:https://git.euphon.cloud/euphon/repo-vis/pulls/5 --- 分析了两个问题,都动刀了: **字体太大** — `Math.min(leaf.w, leaf.h) * 0.15` 没有上限,大 tile 直接算出 20+ world units 的字号。加了个 `Math.min(..., 5)` 的 cap,一行搞定。 **全局视图慢** — 根因是两处叠加: 1. 服务端把所有文件 content 塞进初始 JSON 一次性下发(claude code 这种大 repo 轻松几十 MB) 2. `load()` 里对每个文件同步跑 `computeColorRanges`(highlight.js),几百个文件直接把主线程卡死 改法: - 服务端初始响应改成 metadata only,新增 `GET /api/repos/{key}/file?path=...` 按需拉单文件内容(cache 里内容还在,不影响任何逻辑) - 前端 `_showCode()` 发现 content 为空就异步 fetch,拿到之后再计算 colorRanges,`loading` 标志防重复请求 Rust 编译通过无报错,3 个文件改动。
fam closed this issue 2026-04-07 09:38:49 +00:00
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: euphon/repo-vis#2