Repository navigation
[2026-10-10] — 1.2.0
Fixed — 首屏渲染阻塞外链(core / gallery)
- 移除
packages/core/src/web/css/app.css的 Google Fonts@import—— 该外链是
渲染阻塞资源:实测(fonts.googleapis.com注入 5s 延迟后失败)
DCL 254ms → 5136ms、FCP 1084ms → 5348ms、canvas 首帧 1.34s → 5.48s。
改用系统字体栈(含 PingFang SC / Microsoft YaHei 中文回退),不受网络影响,
与"本地优先、离线可用"定位一致 packages/gallery/src/web/gallery.html同款外链一并移除(该页实际从未使用 Inter,
纯浪费一次跨网请求)
Added — 服务端响应压缩(core)
- 引入
compression中间件(threshold: 1KB,显式排除 SSE/api/events——
压缩会缓冲输出、破坏流式语义) - 实测收益:
/api/graph5000 节点 1.25MB → 66KB(94.8% 削减);
10000 节点 2.51MB → ≈300KB。LAN / 移动端伴侣 / 隧道场景收益最明显
Changed — 图谱渲染性能(core/web js)
draw()节点绘制改按 (颜色, alpha) 分组批量填充(原为每节点独立
beginPath + arc + fill,5000 次光栅化/帧):实测 5000 节点节点绘制
8.87ms → 4.08ms/帧(2.2x),整帧 11.05ms → 6.25ms(1.8x)- 消除
draw()内每帧重建的byId映射:正常 d3 模式下forceLink已把
source/target替换为节点对象引用,该 5000 键对象纯属浪费(仅 d3 降级模式需要,
改为按需惰性构建并缓存)。实测 10000 节点 JS 堆 50.6MB → 22.5MB - 拖拽节点
pointerup/pointercancel主动将 alpha 压到 0.05:
收敛期从 ~1.3s 缩短到 ~0.3s,消除"松开鼠标后页面还在卡"
(2000 节点收敛期主线程占用 33.3% → ~8%) - 实测交互改善(10000 节点):拖拽平移主线程占用 41.6% → 22.4%、
缩放 45.7% → 22.1%、拖拽节点 45.2% → 23.8%
Changed — 图谱索引与目录遍历(core)
- 新增
walkDirAsync(逐目录 readdir + 每 64 条目让出事件循环),
fullGraphIndex改用它:10k 文件同步walkDir≈ 400ms 单次事件循环阻塞
已消除(实测该路径停顿 467ms → 79ms) - 索引批大小 40 → 16(批内处理是同步的,better-sqlite3 事务无法中途让出):
10k 文件全量重建单次事件循环停顿 1088ms → 122ms
Added — 编辑器语法高亮接线(core)
editor-core.js的语言包注入此前是一串effects: []空 dispatch(从未生效)——
非 markdown 文件在编辑器里从来没有语法高亮。改为本地打包 bundle
(scripts/build-editor-bundle.mjs→web/assets/editor-bundle.js):
CodeMirror 6 + 17 种语言 + oneDark,离线可用、无 esm.sh 外链依赖;
preview.js进入编辑模式前预加载语言包,语言扩展同步注入- 根因链(均已实测定位):①
codemirror@6.0.1元包实际只导出
{EditorView, basicSetup, minimalSetup},原代码引用的cm.EditorState恒为 undefined;
② 逐包从 CDN import 导致@codemirror/state出现多实例 →
Unrecognized extension value in extension set;③searchKeymap是KeyBinding[]
而非 extension,直接入 extensions 数组会抛同样错误,必须keymap.of()包装 - 构建脚本内置重复包守卫:bundle 内同包多版本时直接构建失败并给出修复指引;
pnpm.overrides锁定@codemirror/{state,view,language}版本防漂移
Added — 图谱 MCP 只读工具(mcp)
graph_backlinks(文档反向链接,按最近更新排序)、graph_related
(co-citation 相关文档推荐),补齐docs/design/knowledge-graph.md三阶段第 1 项;
查询仅走图谱索引不触磁盘,limit 双向 clamp
Added — 离线缓存清单 API(core)
GET /api/offline/manifest?projectId=&limit=(spec 01 Phase 2):
返回项目内可离线缓存文档清单(路径 / 标题 / 大小 / 修改时间 + 分项目汇总),
供前端 SW 与设置页比对本地缓存状态、按需预缓存- 实现要点:
walkDirAsync异步遍历(不阻塞事件循环)、只列渲染器支持的格式、
limit 严格解析 + clamp(默认 2000 / 最大 10000)+truncated标志;
项目不存在 404、非法 id 400
验证
- 测试 964 passed(+35:MCP 图谱工具 6、离线清单 5、编辑器/索引相关回归)
- 性能实测(本机,Windows + system Chrome):服务端 5000 节点
/api/graph
70ms;10000 节点索引 12.09s、事件循环停顿 211ms → 122ms - 详见
docs/analysis/graph-performance-report-2026-10-10.md(含完整基线、
复现命令与测量局限说明)