mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-10-04 02:52:55 +08:00
18 KiB
18 KiB
Semble 与 CodeGraph React/Vue 对比基准
- 环境:macos aarch64,rustc 1.97.1 (8bab26f4f 2026-07-14)
- 查询:Top 10,每条重复 5 次
- natural_language:英文行为描述;literal:多词代码/错误字面片段;symbol:精确符号名
- 对比:natural_language、literal 使用 CodeGraph explore;symbol 使用 CodeGraph searchNodes
- 判定:返回代码范围必须覆盖人工标注的实现行
整体效果
| 系统 | 查询轨道 | Recall@1 | Recall@5 | Recall@10 | MRR@10 | nDCG@10 |
|---|---|---|---|---|---|---|
| CodeGraph | natural_language | 10.0% | 20.0% | 20.0% | 0.150 | 0.163 |
| CodeGraph | literal | 25.0% | 25.0% | 25.0% | 0.250 | 0.250 |
| CodeGraph | symbol | 50.0% | 50.0% | 50.0% | 0.500 | 0.500 |
| Semble | natural_language | 55.0% | 95.0% | 95.0% | 0.729 | 0.786 |
| Semble | literal | 60.0% | 100.0% | 100.0% | 0.750 | 0.813 |
| Semble | symbol | 100.0% | 100.0% | 100.0% | 1.000 | 1.000 |
性能对比
冷启动就绪包含运行时加载和首次索引;Semble 查询在一秒刷新窗口内直接复用已检查索引,窗口到期或显式 refresh 时重新校验源码指纹。缓存查询与 refresh+symbol 分开计时;查询耗时均为持久进程中的实际工具处理耗时,不含 CLI 进程启动。每条查询先预热一次。
| 数据集 | 系统 | 冷启动就绪 | 缓存加载 | 自然语言 P50 / P95 / σ | 字面 P50 / P95 / σ | 缓存符号 P50 / P95 / σ | 刷新+符号 P50 / P95 | 文件 / 索引单元 | 索引体积 |
|---|---|---|---|---|---|---|---|---|---|
| react | Semble 0.1.0 | 5797.8 ms | 65.3 ms | 11.22 / 12.39 / 0.57 ms | 11.21 / 12.64 / 2.50 ms | 0.01 / 0.01 / 0.00 ms | 13.89 / 15.40 ms | 4760 / 45275 chunks | 57.35 MiB |
| react | CodeGraph 1.0.1 | 36601.0 ms | 96.0 ms | 230.27 / 275.19 / 32.93 ms | 235.11 / 294.48 / 30.22 ms | 2.73 / 14.48 / 4.87 ms | — | 4584 / 53295 nodes / 163188 edges | 317.67 MiB |
| vue | Semble 0.1.0 | 826.1 ms | 12.1 ms | 1.88 / 2.18 / 0.18 ms | 1.96 / 2.41 / 0.23 ms | 0.01 / 0.01 / 0.00 ms | 4.66 / 4.93 ms | 554 / 7933 chunks | 9.24 MiB |
| vue | CodeGraph 1.0.1 | 5232.5 ms | 46.8 ms | 55.94 / 72.82 / 8.29 ms | 41.13 / 50.20 / 3.69 ms | 0.57 / 1.96 / 0.66 ms | — | 552 / 6381 nodes / 44277 edges | 33.33 MiB |
分数据集效果
| 数据集 | 系统 | 轨道 | Recall@1 / @5 / @10 | MRR@10 | nDCG@10 |
|---|---|---|---|---|---|
| react | Semble | natural_language | 70.0% / 100.0% / 100.0% | 0.850 | 0.889 |
| react | Semble | literal | 70.0% / 100.0% / 100.0% | 0.792 | 0.843 |
| react | Semble | symbol | 100.0% / 100.0% / 100.0% | 1.000 | 1.000 |
| react | CodeGraph | natural_language | 0.0% / 0.0% / 0.0% | 0.000 | 0.000 |
| react | CodeGraph | literal | 10.0% / 10.0% / 10.0% | 0.100 | 0.100 |
| react | CodeGraph | symbol | 20.0% / 20.0% / 20.0% | 0.200 | 0.200 |
| vue | Semble | natural_language | 40.0% / 90.0% / 90.0% | 0.608 | 0.682 |
| vue | Semble | literal | 50.0% / 100.0% / 100.0% | 0.708 | 0.782 |
| vue | Semble | symbol | 100.0% / 100.0% / 100.0% | 1.000 | 1.000 |
| vue | CodeGraph | natural_language | 20.0% / 40.0% / 40.0% | 0.300 | 0.326 |
| vue | CodeGraph | literal | 40.0% / 40.0% / 40.0% | 0.400 | 0.400 |
| vue | CodeGraph | symbol | 80.0% / 80.0% / 80.0% | 0.800 | 0.800 |
react · Semble · natural_language 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
1 | 11.16 / 11.40 / 0.10 ms | packages/react/src/ReactHooks.js:44-66 |
create-context |
1 | 12.25 / 12.44 / 0.16 ms | packages/react/src/ReactContext.js:1-18 |
schedule-fiber-update |
1 | 10.89 / 11.11 / 0.12 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:972-1005 |
commit-root |
2 | 12.02 / 12.39 / 0.21 ms | packages/react-reconciler/src/ReactFiberDevToolsHook.js:84-111 |
suspense-begin-work |
1 | 10.70 / 10.89 / 0.13 ms | packages/react-reconciler/src/ReactFiberBeginWork.js:2369-2387 |
delegated-dom-events |
1 | 10.28 / 10.55 / 0.18 ms | packages/react-dom-bindings/src/events/DOMPluginEventSystem.js:430-433 |
create-dom-root |
2 | 11.56 / 11.69 / 0.07 ms | packages/react-dom/src/client/ReactDOMRoot.js:99-117 |
reconcile-keyed-array |
1 | 11.22 / 11.41 / 0.18 ms | packages/react-reconciler/src/ReactChildFiber.js:1160-1182 |
dispatch-state-update |
2 | 11.09 / 11.23 / 0.08 ms | packages/react-reconciler/src/ReactFiberHooks.js:3654-3679 |
hydrate-dom-root |
1 | 11.45 / 11.61 / 0.07 ms | packages/react-dom/src/client/ReactDOMRootFB.js:134-169 |
react · Semble · literal 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
4 | 11.45 / 11.72 / 0.17 ms | packages/react-server/src/ReactFizzHooks.js:406-428 |
create-context |
1 | 12.60 / 12.64 / 0.10 ms | packages/react/src/ReactContext.js:1-18 |
schedule-fiber-update |
1 | 11.30 / 11.48 / 0.12 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:972-1005 |
commit-root |
1 | 11.45 / 11.55 / 0.13 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:3706-3735 |
suspense-begin-work |
3 | 12.51 / 27.95 / 6.14 ms | packages/react-reconciler/src/ReactFiberBeginWork.js:4367-4389 |
delegated-dom-events |
1 | 10.61 / 10.85 / 0.18 ms | packages/react-dom-bindings/src/events/DOMPluginEventSystem.js:430-433 |
create-dom-root |
3 | 11.03 / 11.12 / 0.20 ms | packages/react-dom/src/client/ReactDOMRootFB.js:1-33 |
reconcile-keyed-array |
1 | 10.89 / 11.59 / 0.28 ms | packages/react-reconciler/src/ReactChildFiber.js:1160-1182 |
dispatch-state-update |
1 | 10.33 / 10.54 / 0.15 ms | packages/react-reconciler/src/ReactFiberHooks.js:3602-3630 |
hydrate-dom-root |
1 | 9.78 / 9.90 / 0.09 ms | packages/react-dom/src/client/ReactDOMRootFB.js:134-169 |
react · Semble · symbol 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
1 | 0.01 / 0.01 / 0.00 ms | packages/react/src/ReactHooks.js:44-66 |
create-context |
1 | 0.01 / 0.01 / 0.00 ms | packages/react/src/ReactContext.js:1-18 |
schedule-fiber-update |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:972-1005 |
commit-root |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:3706-3735 |
suspense-begin-work |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-reconciler/src/ReactFiberBeginWork.js:2369-2387 |
delegated-dom-events |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-dom-bindings/src/events/DOMPluginEventSystem.js:430-433 |
create-dom-root |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-dom/src/client/ReactDOMRoot.js:153-174 |
reconcile-keyed-array |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-reconciler/src/ReactChildFiber.js:1160-1182 |
dispatch-state-update |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-reconciler/src/ReactFiberHooks.js:3602-3630 |
hydrate-dom-root |
1 | 0.01 / 0.01 / 0.00 ms | packages/react-dom/src/client/ReactDOMRootFB.js:134-169 |
react · CodeGraph · natural_language 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
未命中 | 204.85 / 211.44 / 3.00 ms | compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts:202-417 |
create-context |
未命中 | 248.40 / 251.60 / 2.98 ms | compiler/crates/react_compiler_hir/src/environment_config.rs:1-230 |
schedule-fiber-update |
未命中 | 177.86 / 180.33 / 1.97 ms | compiler/packages/snap/src/reporter.ts:117-181 |
commit-root |
未命中 | 257.56 / 306.25 / 19.81 ms | compiler/packages/babel-plugin-react-compiler/src/Utils/Result.ts:115-201 |
suspense-begin-work |
未命中 | 230.27 / 232.95 / 1.73 ms | compiler/packages/babel-plugin-react-compiler/src/Flood/Types.ts:17-946 |
delegated-dom-events |
未命中 | 274.57 / 275.35 / 1.58 ms | packages/internal-test-utils/ReactInternalTestUtils.js:349-379 |
create-dom-root |
未命中 | 211.90 / 214.24 / 1.10 ms | compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingRanges.ts:599-619 |
reconcile-keyed-array |
未命中 | 226.78 / 242.64 / 7.47 ms | compiler/packages/babel-plugin-react-compiler/src/Flood/Types.ts:17-946 |
dispatch-state-update |
未命中 | 183.96 / 203.61 / 9.03 ms | compiler/packages/snap/src/reporter.ts:1-275 |
hydrate-dom-root |
未命中 | 268.40 / 272.53 / 2.65 ms | packages/react-dom/src/client/ReactDOMRoot.js:149-357 |
react · CodeGraph · literal 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
未命中 | 202.23 / 224.65 / 9.12 ms | compiler/packages/babel-plugin-react-compiler/src/Flood/Types.ts:148-865 |
create-context |
未命中 | 226.69 / 231.59 / 3.10 ms | compiler/crates/react_compiler_hir/src/object_shape.rs:305-433 |
schedule-fiber-update |
1 | 233.96 / 235.11 / 1.69 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:699-1132 |
commit-root |
未命中 | 200.31 / 202.11 / 1.09 ms | packages/react-dom/src/client/ReactDOMRoot.js:149-357 |
suspense-begin-work |
未命中 | 246.94 / 250.10 / 2.24 ms | packages/react-reconciler/src/ReactFiberRootScheduler.js:572-582 |
delegated-dom-events |
未命中 | 287.21 / 294.48 / 3.28 ms | packages/react-dom/src/client/ReactDOMRoot.js:149-357 |
create-dom-root |
未命中 | 248.93 / 250.32 / 1.06 ms | packages/react-dom/src/client/ReactDOMRoot.js:149-357 |
reconcile-keyed-array |
未命中 | 291.47 / 298.40 / 3.24 ms | compiler/crates/react_compiler_hir/src/environment.rs:38-534 |
dispatch-state-update |
未命中 | 238.16 / 240.85 / 4.42 ms | compiler/crates/react_compiler_inference/src/infer_mutation_aliasing_effects.rs:117-144 |
hydrate-dom-root |
未命中 | 211.90 / 216.60 / 2.41 ms | packages/react-dom-bindings/src/shared/ReactFlightClientConfigDOM.js:1-139 |
react · CodeGraph · symbol 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
state-hook-api |
未命中 | 2.51 / 3.14 / 0.29 ms | compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/globals-dont-resolve-local-useState.js:4-7 |
create-context |
未命中 | 2.78 / 3.19 / 0.19 ms | compiler/apps/playground/lib/createContext.ts:26-40 |
schedule-fiber-update |
1 | 2.14 / 2.57 / 0.23 ms | packages/react-reconciler/src/ReactFiberWorkLoop.js:987-1113 |
commit-root |
未命中 | 2.23 / 2.84 / 0.29 ms | packages/react-reconciler/src/ReactFiberCommitWork.js:220-238 |
suspense-begin-work |
未命中 | 12.34 / 12.72 / 0.27 ms | — |
delegated-dom-events |
1 | 2.34 / 2.78 / 0.27 ms | packages/react-dom-bindings/src/events/DOMPluginEventSystem.js:432-459 |
create-dom-root |
未命中 | 2.68 / 2.94 / 0.26 ms | packages/use-sync-external-store/src/__tests__/useSyncExternalStoreShared-test.js:90-110 |
reconcile-keyed-array |
未命中 | 14.48 / 15.25 / 0.65 ms | — |
dispatch-state-update |
未命中 | 12.23 / 13.05 / 0.40 ms | — |
hydrate-dom-root |
未命中 | 2.14 / 2.40 / 0.11 ms | packages/react-dom/src/__tests__/ReactDOMFizzShellHydration-test.js:104-123 |
vue · Semble · natural_language 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 1.85 / 1.92 / 0.08 ms | packages/reactivity/src/reactive.ts:85-106 |
create-ref |
4 | 1.87 / 1.89 / 0.02 ms | packages/reactivity/src/ref.ts:104-114 |
create-renderer |
1 | 1.90 / 1.92 / 0.03 ms | packages/runtime-core/src/renderer.ts:303-323 |
patch-keyed-children |
3 | 1.62 / 1.76 / 0.06 ms | packages/runtime-core/src/compat/instanceChildren.ts:1-17 |
compile-template |
未命中 | 1.91 / 1.95 / 0.04 ms | packages/compiler-sfc/src/compileTemplate.ts:105-107 |
parse-template |
2 | 2.18 / 2.23 / 0.03 ms | packages/compiler-sfc/src/parse.ts:95-110 |
reactivity-watch |
2 | 1.75 / 1.77 / 0.04 ms | packages/reactivity/src/index.ts:81-97 |
create-app-api |
2 | 2.05 / 2.09 / 0.06 ms | packages/runtime-core/src/component.ts:597-624 |
define-component |
1 | 1.92 / 2.01 / 0.04 ms | packages/runtime-core/src/apiDefineComponent.ts:303-315 |
hydrate-node |
1 | 1.58 / 1.70 / 0.06 ms | packages/runtime-core/src/hydration.ts:119-137 |
vue · Semble · literal 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 1.75 / 1.87 / 0.05 ms | packages/reactivity/src/reactive.ts:85-106 |
create-ref |
1 | 1.96 / 1.97 / 0.02 ms | packages/reactivity/src/ref.ts:52-72 |
create-renderer |
2 | 1.98 / 2.00 / 0.03 ms | packages/runtime-core/src/renderer.ts:325-346 |
patch-keyed-children |
3 | 2.14 / 2.25 / 0.07 ms | packages/runtime-core/src/renderer.ts:1660-1675 |
compile-template |
2 | 1.82 / 1.97 / 0.07 ms | packages/compiler-core/src/index.ts:1-30 |
parse-template |
2 | 1.77 / 1.85 / 0.04 ms | packages/compiler-core/src/parser.ts:70-96 |
reactivity-watch |
4 | 1.58 / 1.62 / 0.03 ms | packages/reactivity/src/watch.ts:49-78 |
create-app-api |
1 | 2.12 / 2.28 / 0.07 ms | packages/runtime-core/src/apiCreateApp.ts:253-273 |
define-component |
1 | 1.91 / 2.00 / 0.05 ms | packages/runtime-core/src/apiDefineComponent.ts:303-315 |
hydrate-node |
1 | 2.41 / 2.48 / 0.04 ms | packages/runtime-core/src/hydration.ts:119-137 |
vue · Semble · symbol 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 0.01 / 0.01 / 0.00 ms | packages/reactivity/src/reactive.ts:85-106 |
create-ref |
1 | 0.01 / 0.01 / 0.00 ms | packages/reactivity/src/ref.ts:52-72 |
create-renderer |
1 | 0.01 / 0.01 / 0.00 ms | packages/runtime-core/src/renderer.ts:303-323 |
patch-keyed-children |
1 | 0.01 / 0.01 / 0.00 ms | packages/runtime-core/src/renderer.ts:1777-1804 |
compile-template |
1 | 0.01 / 0.01 / 0.00 ms | packages/compiler-core/src/compile.ts:65-70 |
parse-template |
1 | 0.01 / 0.01 / 0.00 ms | packages/compiler-core/src/parser.ts:1009-1028 |
reactivity-watch |
1 | 0.01 / 0.01 / 0.00 ms | packages/reactivity/src/watch.ts:103-124 |
create-app-api |
1 | 0.01 / 0.01 / 0.00 ms | packages/runtime-core/src/apiCreateApp.ts:253-273 |
define-component |
1 | 0.01 / 0.01 / 0.00 ms | packages/runtime-core/src/apiDefineComponent.ts:303-315 |
hydrate-node |
1 | 0.01 / 0.01 / 0.00 ms | packages/runtime-core/src/hydration.ts:119-137 |
vue · CodeGraph · natural_language 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 48.76 / 51.18 / 1.03 ms | packages/reactivity/src/reactive.ts:15-438 |
create-ref |
1 | 46.94 / 48.57 / 0.81 ms | packages/reactivity/src/ref.ts:61-579 |
create-renderer |
2 | 72.82 / 72.94 / 0.32 ms | packages/runtime-core/src/compat/global.ts:93-353 |
patch-keyed-children |
未命中 | 50.77 / 51.52 / 0.92 ms | packages/runtime-core/src/renderer.ts:153-2640 |
compile-template |
未命中 | 56.67 / 58.12 / 0.74 ms | packages/runtime-core/src/compat/global.ts:146-156 |
parse-template |
未命中 | 49.11 / 49.73 / 0.43 ms | packages/compiler-sfc/src/parse.ts:22-354 |
reactivity-watch |
未命中 | 47.20 / 47.46 / 0.48 ms | packages/reactivity/src/watch.ts:34-93 |
create-app-api |
未命中 | 62.82 / 63.58 / 0.45 ms | packages/runtime-core/src/compat/global.ts:85-156 |
define-component |
2 | 61.96 / 62.26 / 0.18 ms | packages/runtime-core/src/compat/global.ts:64-333 |
hydrate-node |
未命中 | 61.93 / 63.06 / 0.67 ms | packages/runtime-core/src/compat/global.ts:146-156 |
vue · CodeGraph · literal 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 43.32 / 44.13 / 0.45 ms | packages/reactivity/src/reactive.ts:1-446 |
create-ref |
1 | 38.00 / 38.77 / 0.38 ms | packages/reactivity/src/ref.ts:1-579 |
create-renderer |
未命中 | 50.20 / 50.30 / 0.26 ms | packages/runtime-core/src/renderer.ts:93-304 |
patch-keyed-children |
未命中 | 41.23 / 41.83 / 0.32 ms | packages-private/dts-test/ref.test-d.ts:345-351 |
compile-template |
1 | 39.40 / 40.28 / 0.38 ms | packages/compiler-core/src/compile.ts:1-122 |
parse-template |
未命中 | 40.95 / 41.30 / 0.25 ms | packages/compiler-core/src/parser.ts:1-288 |
reactivity-watch |
未命中 | 37.55 / 38.09 / 0.54 ms | packages/runtime-core/src/apiWatch.ts:1-92 |
create-app-api |
1 | 40.47 / 40.94 / 0.46 ms | packages/runtime-core/src/apiCreateApp.ts:30-494 |
define-component |
未命中 | 43.52 / 45.06 / 0.66 ms | packages/shared/src/general.ts:1-219 |
hydrate-node |
未命中 | 45.72 / 47.40 / 0.78 ms | packages/runtime-core/src/vnode.ts:71-256 |
vue · CodeGraph · symbol 明细
| 查询 | 首个命中 | P50 / P95 / σ | Top 1 |
|---|---|---|---|
reactive-proxy |
1 | 0.88 / 0.91 / 0.02 ms | packages/reactivity/src/reactive.ts:87-99 |
create-ref |
1 | 0.96 / 1.12 / 0.07 ms | packages/reactivity/src/ref.ts:64-66 |
create-renderer |
1 | 0.30 / 0.30 / 0.01 ms | packages/runtime-core/src/renderer.ts:318-323 |
patch-keyed-children |
未命中 | 1.96 / 4.02 / 0.82 ms | — |
compile-template |
1 | 0.33 / 0.35 / 0.01 ms | packages/compiler-core/src/compile.ts:67-122 |
parse-template |
1 | 0.40 / 0.41 / 0.00 ms | packages/compiler-core/src/parser.ts:1028-1079 |
reactivity-watch |
1 | 0.58 / 0.60 / 0.01 ms | packages/reactivity/src/watch.ts:120-331 |
create-app-api |
1 | 0.29 / 0.30 / 0.00 ms | packages/runtime-core/src/apiCreateApp.ts:253-487 |
define-component |
1 | 0.62 / 0.64 / 0.01 ms | packages/runtime-core/src/apiDefineComponent.ts:305-315 |
hydrate-node |
未命中 | 0.27 / 0.37 / 0.05 ms | packages/runtime-core/src/components/Suspense.ts:806-856 |
公平性说明
自然语言和多词字面轨道调用 CodeGraph 官方推荐的 codegraph_explore,包含图扩展和最终源码读取;符号轨道调用 searchNodes。Semble 三条轨道都调用同一个混合搜索接口。所有查询共享同一组人工标注实现位置,未针对系统选择不同真值。两者输出粒度不同,因此本报告适合比较达到同一代码位置的效果和实际工具延迟,不代表各内部算法的微基准。CodeGraph 的独立 callers、callees 和 impact 能力不属于本次范围。