Skip to content

feat(knowledge-graph): 新增 Sigma.js WebGL 与 react-force-graph-2d 图谱渲染器,四引擎并存切换 - #522

Merged
ThreeFish-AI merged 4 commits into
feature/1.x.xfrom
ThreeFish-AI/graph-canvas-libs-compare
May 11, 2026
Merged

feat(knowledge-graph): 新增 Sigma.js WebGL 与 react-force-graph-2d 图谱渲染器,四引擎并存切换#522
ThreeFish-AI merged 4 commits into
feature/1.x.xfrom
ThreeFish-AI/graph-canvas-libs-compare

Conversation

@ThreeFish-AI

@ThreeFish-AI ThreeFish-AI commented May 11, 2026

Copy link
Copy Markdown
Owner

背景

  • 当前知识图谱可视化采用 Cytoscape.js + d3-force 双渲染器架构,Canvas 渲染在大图(>5K 节点)时性能受限,视觉表现力不足
  • 深入调研全网方案(Sigma.js、react-force-graph、vis-network、AntV G6、ECharts、Reagraph 等)后,选定两个显著优于当前方案的渲染器并存实现

核心变更

新增两个图谱渲染器:

  1. SigmaGraphCanvas — Sigma.js v3 + graphology WebGL 渲染器

    • GPU 加速,比 Cytoscape Canvas 快 10-100x
    • ForceAtlas2 布局算法,10K+ 节点 60 FPS
    • 原生 doubleClickNode 事件支持增量子图加载
  2. ForceGraphCanvas — react-force-graph-2d Canvas 渲染器

    • d3-force-3d 物理引擎,原生 React 组件
    • 有向粒子流动效果(linkDirectionalParticles
    • 自定义 nodeCanvasObject 实现圆形 + 标签渲染

工程改进:

  • 抽取共享类型 types.tsGraphCanvasNode/GraphCanvasEdge/GraphCanvasProps),四个渲染器统一接口
  • Toolbar 扩展为四选一切换按钮(Cytoscape | d3-force | Sigma | Force Graph)
  • 新组件均通过 next/dynamic + ssr: false 动态导入,code-split 不影响主包体积
  • 所有渲染器支持:节点点击/选中高亮/双击增量子图加载/暗色主题/跨语料库竞态守卫

依赖新增: sigma@^3.0.3graphology@^0.26.0graphology-layout-forceatlas2@^0.10.1react-force-graph-2d@^1.29.1

风险与回滚

  • 主要风险:新增渲染器均为动态导入,不影响主包体积;WebGL 上下文在 unmount 时正确销毁(sigma.kill());react-force-graph 会 mutate 数据对象(已做深拷贝防护)
  • 回滚方式:git revert 即可,不涉及数据库或后端变更

验证证据

  • pnpm typecheck 通过(0 error)
  • pnpm lint 通过(0 warning)
  • 浏览器实机验证:四渲染器切换无报错、节点选中/高亮正常、暗色主题一致、增量子图加载正常
  • 现有 Cytoscape 和 d3-force 渲染器无回归

影响范围

  • 前端:apps/negentropy-ui/app/knowledge/graph/ 下 5 个文件变更 + 3 个新建文件,package.json 新增 4 个运行时依赖
  • 后端:无变更
  • CI/文档:无变更

Next Best Action

  • 在生产数据(大图 500+ 节点)下对比四个渲染器性能,收集用户反馈后决定默认渲染器
  • 考虑为 Sigma 渲染器增加 WebWorker 后台布局计算,进一步提升大图体验

🤖 Generated with Claude Code, CodeX, Gemini

深度调研全网知识图谱可视化方案后,选定两个显著优于当前 Cytoscape + d3-force 的渲染器并存实现:
- Sigma.js v3 + graphology:WebGL 渲染引擎,10-100x 性能提升,ForceAtlas2 布局
- react-force-graph-2d:原生 React 组件,d3-force-3d 物理,粒子流动视觉效果

变更要点:
- 新建 SigmaGraphCanvas.tsx(WebGL 渲染器,graphology 数据结构,动态导入避免 SSR 问题)
- 新建 ForceGraphCanvas.tsx(Canvas 渲染器,自定义 nodeCanvasObject,粒子效果)
- 抽取共享类型 types.ts(GraphCanvasNode/Edge/Props),GraphCanvas 改为引用共享类型
- page.tsx 扩展 renderer 为四选一切换(Cytoscape | d3-force | Sigma | Force Graph)
- 所有渲染器均支持:节点点击/选中高亮/双击增量子图加载/暗色主题

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI changed the title feat(knowledge-graph): 新增 Sigma.js WebGL 与 react-force-graph-2d 两种图谱渲染器 feat(knowledge-graph): 新增 Sigma.js WebGL 与 react-force-graph-2d 图谱渲染器,四引擎并存切换 May 11, 2026
- 将 ResizeObserver 提升为 roRef,在 useEffect cleanup 中正确 disconnect,
  修复 async init() 内 return cleanup 永远不执行的资源泄漏;
- 在 buildGraph 及数据同步 Effect 的 addNode 阶段同时写入 __origType/__origCommunity,
  消除 Effect #3 读取未初始化属性导致的 fallback 默认色覆盖问题;
- 删除已不再需要的独立 Effect #4(原保存原始属性)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
合并远程 feature/1.x.x 分支,解决以下冲突:
- page.tsx: 合并 5 种渲染引擎切换(Cytoscape / d3-force / 3D / Sigma / Force Graph);
- package.json: 同时保留 react-force-graph-2d 与 react-force-graph-3d 依赖;
- pnpm-lock.yaml: 由 pnpm install --lockfile-only 自动合并。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
合并 feature/1.x.x 时未消除两处 import dynamic from "next/dynamic"
(line 4 与 line 18),导致 TypeScript 编译与 Turbopack 构建均报
Duplicate identifier 错误。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit c176aef into feature/1.x.x May 11, 2026
12 checks passed
@ThreeFish-AI
ThreeFish-AI deleted the ThreeFish-AI/graph-canvas-libs-compare branch May 12, 2026 01:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant