<Profiler>
<Profiler>
๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก React ํธ๋ฆฌ์ ๋ ๋๋ง ์ฑ๋ฅ์ ์ธก์ ํ ์ ์์ต๋๋ค.
<Profiler id="App" onRender={onRender}>
<App />
</Profiler>
๋ ํผ๋ฐ์ค
<Profiler>
๋ ๋๋ง ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํด์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ <Profiler>
๋ก ๊ฐ์ธ์ค๋๋ค.
<Profiler id="App" onRender={onRender}>
<App />
</Profiler>
Props
id
: ์ฑ๋ฅ์ ์ธก์ ํ๋ UI ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ฌธ์์ด์ ๋๋ค.onRender
: ํ๋กํ์ผ๋ง ๋ ํธ๋ฆฌ ๋ด์ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค React๊ฐ ํธ์ถํ๋onRender
์ฝ๋ฐฑ์ ๋๋ค. ๋ ๋๋ง ๋ ๋ด์ฉ๊ณผ ์์๋ ์๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ฃผ์ ์ฌํญ
- ํ๋กํ์ผ๋ง์ ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋๋ฅผ ๋ํ๊ธฐ ๋๋ฌธ์, ํ๋ก๋์ ๋น๋์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๊ฐ ๋์ด์์ต๋๋ค. ํ๋ก๋์ ํ๋กํ์ผ๋ง์ ์ฌ์ฉํ๋ ค๋ฉด, ํ๋กํ์ผ๋ง ๊ธฐ๋ฅ์ด ํ์ฑํ๋ ํน์ํ ํ๋ก๋์ ๋น๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
onRender
์ฝ๋ฐฑ
React๋ onRender
์ฝ๋ฐฑ์ ๋ ๋๋ง ๋ ๋ด์ฉ๊ณผ ๊ฐ์ด ํธ์ถํฉ๋๋ค.
function onRender(id, phase, actualDuration, baseDuration, startTime, commitTime) {
// ๋ ๋๋ง ์๊ฐ ์ง๊ณ ํน์ ๋ก๊ทธ...
}
๋งค๊ฐ๋ณ์
id
: ์ปค๋ฐ๋<Profiler>
ํธ๋ฆฌ์ ๋ฌธ์์ดid
ํ๋กํผํฐ์ ๋๋ค. ํ๋กํ์ผ๋ฌ๋ฅผ ๋ค์ค์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ํธ๋ฆฌ ๋ด์์ ์ด๋ค ๋ถ๋ถ์ด ์ปค๋ฐ ๋์๋์ง ์๋ณํ ์ ์๋๋ก ํด์ค๋๋ค.phase
:"mount"
,"update"
ํน์"nested-update"
. ํธ๋ฆฌ๊ฐ ์ต์ด๋ก ๋ง์ดํธ๋์๋์ง ๋๋ props, state ๋๋ hook์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฆฌ๋ ๋๋ง ๋์๋์ง ์ ์ ์์ต๋๋ค.actualDuration
: ํ์ฌ ์ ๋ฐ์ดํธ์ ๋ํด<Profiler>
์ ์์๋ค์ ๋ ๋๋งํ๋๋ฐ ์์๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. ์ด๋ ํ์ ํธ๋ฆฌ๊ฐ memoization์ ์ผ๋ง๋ ์ ์ฌ์ฉํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค (e.g.memo
์useMemo
). ๋ง์ ์์์ด ํน์ props๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ง ๋ค์ ๋ฆฌ๋ ๋๋ง์ด ๋์ด์ผ ํ๋ฏ๋ก ์ด์์ ์ผ๋ก๋ ์ด ๊ฐ์ ์ต์ด ๋ง์ดํธ ์ดํ์๋ ๋ง์ด ๊ฐ์ํด์ผ ํฉ๋๋ค.baseDuration
: ์ต์ ํ ์์ด ์ ์ฒด<Profiler>
ํ์ํธ๋ฆฌ์ ๋ํด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ์ ํ๋ ์์๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. ํธ๋ฆฌ์ ์๋ ๊ฐ ์ปดํฌ๋ํธ์ ๊ฐ์ฅ ์ต๊ทผ ๋ ๋๋ง ์๊ฐ์ ํฉ์ฐํ์ฌ ๊ณ์ฐ๋ฉ๋๋ค. ์ด ๊ฐ์ ์ต์ ์ ๋ ๋๋ง ๋น์ฉ(์: ์ต์ด ๋ง์ดํธ ๋๋ memoization์ด ์๋ ํธ๋ฆฌ)์ ์ถ์ ํฉ๋๋ค.actualDuration
๊ณผ ๋น๊ตํ์ฌ memoization์ด ์๋ํ๋์ง ํ์ธํฉ๋๋ค.startTime
: React๊ฐ ํ์ฌ ์ ๋ฐ์ดํธ ๋ ๋๋ง์ ์์ํ ์์ ์ ๋ํ ์ซ์ ํ์์คํฌํ์ ๋๋ค.commitTime
: React๊ฐ ํ์ฌ ์ ๋ฐ์ดํธ๋ฅผ ์ปค๋ฐํ ์์ ์ ๋ํ ์ซ์ ํ์์คํฌํ์ ๋๋ค. ์ด ๊ฐ์ ์ปค๋ฐ๋ ๋ชจ๋ ํ๋กํ์ผ๋ฌ ๊ฐ์ ๊ณต์ ๋๋ฏ๋ก ์ํ๋ ๊ฒฝ์ฐ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.
์ฌ์ฉ๋ฒ
ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ ๋๋ง ์ฑ๋ฅ ์ธก์
React ํธ๋ฆฌ๋ฅผ <Profiler>
์ปดํฌ๋ํธ๋ก ๊ฐ์ธ์ ๋ ๋๋ง ์ฑ๋ฅ์ ์ธก์ ํฉ๋๋ค.
<App>
<Profiler id="Sidebar" onRender={onRender}>
<Sidebar />
</Profiler>
<PageContent />
</App>
ํธ๋ฆฌ ๋ด์ ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋ฅผ ์ปค๋ฐํ ๋๋ง๋ค React๊ฐ ํธ์ถํ๋ onRender
์ฝ๋ฐฑ(ํจ์)์ UI ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ฌธ์์ด id
(๋ฌธ์์ด) ๋ ๊ฐ์ props๊ฐ ์๊ตฌ๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ๋ถ๋ณ ์ธก์
<Profiler>
์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ถ๋ถ๋ณ๋ก ์ธก์ ํ ์ ์์ต๋๋ค.
<App>
<Profiler id="Sidebar" onRender={onRender}>
<Sidebar />
</Profiler>
<Profiler id="Content" onRender={onRender}>
<Content />
</Profiler>
</App>
<Profiler>
์ปดํฌ๋ํธ๋ค์ ์ค์ฒฉํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<App>
<Profiler id="Sidebar" onRender={onRender}>
<Sidebar />
</Profiler>
<Profiler id="Content" onRender={onRender}>
<Content>
<Profiler id="Editor" onRender={onRender}>
<Editor />
</Profiler>
<Preview />
</Content>
</Profiler>
</App>
<Profiler>
๋ ๊ฐ๋ฒผ์ด ์ปดํฌ๋ํธ์ด์ง๋ง ์ฌ์ฉํ ๋๋ง๋ค ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฐ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ํ์ํ ๋๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.