์ด๋น 100ํ ์ด์์ WebSocket ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ UI ๋ ๋๋ง ์ต์ ํ ์ค๊ณ
๐๐ผ๐ ๐ฑ๐ผ ๐๐ผ๐ ๐ฝ๐ฟ๐ฒ๐๐ฒ๐ป๐ ๐จ๐ ๐น๐ฎ๐ด ๐๐ต๐ฒ๐ป ๐ฟ๐ฒ๐ฐ๐ฒ๐ถ๐๐ถ๐ป๐ด ๐ผ๐๐ฒ๐ฟ ๐ญ๐ฌ๐ฌ ๐ช๐ฒ๐ฏ๐ฆ๐ผ๐ฐ๐ธ๐ฒ๐ ๐ฒ๐๐ฒ๐ป๐๐ ๐ฝ๐ฒ๐ฟ ๐๐ฒ๐ฐ๐ผ๐ป๐ฑ?
AI ์์ฝ
Context
์ด๋น 100ํ ์ด์์ ๊ณ ๋น๋ WebSocket ์ด๋ฒคํธ ์์ ์ ๋ฐ์ํ๋ ๋ฉ์ธ ์ค๋ ๋ ๋ถํ ๋ถ์. ๋งค ์ด๋ฒคํธ๋ง๋ค ๋ฐ์ํ๋ DOM ์ ๋ฐ์ดํธ๋ก ์ธํ ๊ณผ๋ํ Reflow ๋ฐ Repaint๊ฐ UI Lag์ ๊ทผ๋ณธ ์์ธ์ผ๋ก ์์ฉํ๋ ๊ตฌ์กฐ์ ํ๊ณ ์กด์ฌ.
Technical Solution
- Event Stream๊ณผ ๋ ๋๋ง ์ค๋ ๋ ๋ถ๋ฆฌ๋ฅผ ํตํ Decoupling ๊ตฌ์กฐ ์ค๊ณ
- Throttling ๋ฐ Buffering ๊ธฐ๋ฒ์ ์ ์ฉํ ์ํ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ ์ ํ ๋ฐ ๋ฐ์ดํฐ ์ง์ฝ ์ฒ๋ฆฌ
- requestAnimationFrame ๊ธฐ๋ฐ์ DOM Batch Update๋ฅผ ํตํ ๋ธ๋ผ์ฐ์ ๋ฆฌํ๋ ์ ๋ ์ดํธ ๋๊ธฐํ
- Web Worker ๋์ ์ผ๋ก ๋ฐ์ดํฐ ํ์ฑ ๋ฐ ์ ์ฒ๋ฆฌ ๋ก์ง์ ๋ฉ์ธ ์ค๋ ๋์์ ์คํ๋ก๋ํ์ฌ ์ฐ์ฐ ๋ณ๋ชฉ ์ ๊ฑฐ
- Virtualization ์ ์ฉ์ ํตํ ๋ ๋๋ง ๋์ DOM ๋ ธ๋ ์ ์ต์ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ ๊ฐ์
- React ํ๊ฒฝ ๋ด Mutable Ref ํ์ฉ์ผ๋ก ๋ถํ์ํ State ๊ธฐ๋ฐ Re-render Cascade ๋ฐฉ์ง
์ค์ฒ ํฌ์ธํธ
- ๊ณ ๋น๋ ๋ฐ์ดํฐ ์์ ์ ์ํ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ๋ฅผ 10~15 FPS๋ก ์ ํํ๋ Throttling ์ ์ฉ ๊ฒํ - ๋ฌด๊ฑฐ์ด ๋ฐ์ดํฐ ๋ณํ ๋ก์ง์ Web Worker ์ด๊ด ๊ฐ๋ฅ ์ฌ๋ถ ํ๋จ - ๋๋์ ๋ฆฌ์คํธ ๋ ๋๋ง ์ Windowing ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ ํตํ DOM ์ต์ ํ ์ํ - DOM ์ง์ ์กฐ์ ์ DocumentFragment๋ฅผ ํ์ฉํ ๋จ์ผ Append ์์ ์ํ