perf(network-graph): preserve memoized rerender boundary - #1560
perf(network-graph): preserve memoized rerender boundary#1560seonghobae wants to merge 26 commits into
Conversation
NetworkGraph 컴포넌트는 무거운 서드파티 라이브러리인 vis-network를 초기화하고 DOM을 직접 조작합니다. 이 컴포넌트가 부모 컴포넌트(WorkspaceHome 등)의 상태 변경으로 인해 불필요하게 리렌더링되는 것을 방지하기 위해 React.memo로 감쌌습니다. 이로 인해 관계 컨텍스트가 안정적일 때 리렌더링 및 DOM 스래싱을 방지하여 성능이 크게 향상됩니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
Merge PR #1522's bounded relationship and node option materialization into PR #1526 without rewriting history. The child retains its independent React memoization behavior while sharing one NetworkGraph implementation and combined regression suite. Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
Reverse the follow-up that reintroduced full-array option materialization, deleted the bounded option and parent-rerender tests, and replaced behavioral memoization evidence with an implementation-marker assertion. Preserve both parent and child deltas. Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
Integrate the current bounded option-materialization parent without force-pushing or dropping the child memoization delta. Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
Reverse the concurrent follow-up that again removed bounded option materialization and behavioral memoization tests. Keep the complete parent and child delta without rewriting branch history.\n\nAssisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
NetworkGraph 컴포넌트 내부에서 리액트의 불필요한 리렌더링 작업이 발생하지 않도록 `React.memo()`로 감쌌습니다. 부모 컴포넌트가 변경되더라도 `NetworkGraph`의 React 상태가 안정적인 경우, 리액트 컴포넌트 렌더링 작업을 크게 줄여줍니다. 또한 이 효과를 증명하는 테스트를 추가했습니다.
|
Lifecycle reconciled: this successor stays Draft because non-default-base Application CI, Bandit, and image validation were suppressed. #1562 repairs those repository-owned trigger filters with 38 governance tests and actionlint. After #1562 and parent #1522 merge, re-fetch/retarget this exact delta, mark Ready, and require fresh hosted checks and independent review. |
# Conflicts: # frontend/src/components/NetworkGraph.tsx
…3' of https://github.com/ContextualWisdomLab/naruon into codex/networkgraph-memoization-successor
|
Non-force restack complete at exact head |
Restore the current parent test blobs, remove generated child-only churn, and reinstate the real parent-rerender regression without rewriting predecessor history. Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
Adopt the current canonical parent non-destructively. The existing child tree already equals current #1522 plus the memoization source/test delta, so no product files change in this merge. Assisted-by: OpenAI Codex
Purpose
Stable successor for #1526. This PR preserves the memoization child delta without rewriting predecessor history or duplicating #1522's bounded-option ownership.
Current exact authority
bolt/networkgraph-array-copy-removal-3640017362173775883@fd938c1c6ae1328fafba1959fd55c3b9037e4346a976b4d009ee5ab5f18899e30f41778ecdb47eecfrontend/src/components/NetworkGraph.tsxplusfrontend/src/components/NetworkGraph.memoization.test.tsxParent adoption and repair
#1522 advanced after this successor's earlier repair. A fresh parent audit found that one nominal CI-trigger commit had actually loosened the Strix
httpx2==2.12.0pin; #1522 repaired that drift test-first and moved tofd938c1c....This successor adopted the current parent without force or destructive rebase. Ordinary two-parent merge
4795d593f0ec3087c1b3cce82bfee692436eaeeefirst joined the histories. The immediate parent/child compare then exposed one retained stale parent blob:backend/tests/test_container_dependency_pin_contract.pydid not yet contain #1522's new exact-httpx2 contract. Rather than treating the concurrent delta as a race, direct childa976b4d009ee5ab5f18899e30f41778ecdb47eecadopted that exact parent blob. A fresh compare now reports only the two intended NetworkGraph child files andbehind_by=0.The production child delta remains the
React.memoboundary only. The behavioral regression rendersParentHarnessandNetworkGraphin the same React root, lets child async work settle, rerenders only the parent, verifies the parent DOM changes, and requires the child's render-body observation count not to increase. It does not inspect React private markers. #1522 continues to own relationship/node option limits and their tests.Evidence and merge boundary
Fresh repository-owned pull-request workflow lookup for
a976b4d009ee5ab5f18899e30f41778ecdb47eeccurrently returns 0 runs. No hosted GREEN is claimed, and predecessor checks/reviews do not transfer. #1522 itself remains Draft with new exact-head checks non-terminal.Keep Draft until #1522 is protected-integrated, this descendant is revalidated against the resulting parent, and one unchanged exact head has every then-live required repository/organization check terminal-success, zero valid unresolved current-head findings/threads, and the qualifying independent post-last-push approval required by live governance. Close #1526 only after #1560 merges and a fresh protected-target equivalence audit proves complete succession. No force-push, destructive rebase, self-approval, admin bypass, dummy/no-op requeue, predecessor-evidence transfer, gate weakening, or unsupported p95 claim.