โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
Profiler๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ๋๋งํ๋ ๋น๋์ ๋ ๋๋ง ๋น์ฉ์ ์ธก์ ํ๋ค. Profiler์ ๋ชฉ์ ์ ๋ฉ๋ชจ์ด์ ์ด์ ๊ฐ์ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ์ ํ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฐ ๋ถ๋ถ๋ค์ ์๋ณํด๋ด๋ ๊ฒ์ด๋ค.
Profiler
๋ React ํธ๋ฆฌ ๋ด์ ์ด๋์๋ ์ถ๊ฐ๋ ์ ์์ผ๋ฉฐ ํธ๋ฆฌ์ ํน์ ๋ถ๋ถ์ ๋ ๋๋ง ๋น์ฉ์ ๊ณ์ฐํ๋ค.
render(
<App>
// id์ onRender์ props๋ฅผ ์๊ตฌ
// React ํธ๋ฆฌ ๋ด ์ปดํฌ๋ํธ์ ์
๋ฐ์ดํธ๊ฐ ์ปค๋ฐ๋๋ฉด ํธ์ถ๋๋ค
<Profiler id="Navigation" onRender={callback}>
<Navigation {...props} />
</Profiler>
<Main {...props} />
</App>
);
// ๋ณต์์ Profiler ์ปดํฌ๋ํธ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค๋ฅธ ๋ถ๋ถ๋ค์ ๊ณ์ฐํ ์ ์๋ค.
render(
<App>
<Profiler id="Navigation" onRender={callback}>
<Navigation {...props} />
</Profiler>
<Profiler id="Main" onRender={callback}>
<Main {...props} />
</Profiler>
</App>
);
// Profiler ์ปดํฌ๋ํธ๋ ํ์ ํธ๋ฆฌ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ ๊ณ์ฐํ๊ธฐ ์ํด ์ค์ฒฉํด์ ์ฌ์ฉํ ์ ์๋ค
render(
<App>
<Profiler id="Panel" onRender={callback}>
<Panel {...props}>
<Profiler id="Content" onRender={callback}>
<Content {...props} />
</Profiler>
<Profiler id="PreviewPane" onRender={callback}>
<PreviewPane {...props} />
</Profiler>
</Panel>
</Profiler>
</App>
);
์ด ํจ์๋ ๋ฌด์์ด ๋ ๋๋ง ๋์๋์ง ๊ทธ๋ฆฌ๊ณ ์ผ๋ง๋ ๊ฑธ๋ ธ๋์ง ์ค๋ช ํ๋ ์ ๋ ฅ๊ฐ์ ๋ฐ๊ฒ ๋๋ค.
function onRenderCallback(
id, // ๋ฐฉ๊ธ ์ปค๋ฐ๋ Profiler ํธ๋ฆฌ์ "id"
phase, // "mount" (ํธ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ๋ง์ดํธ๊ฐ ๋ ๊ฒฝ์ฐ) ํน์ "update"(ํธ๋ฆฌ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๊ฒฝ์ฐ)
actualDuration, // ์ปค๋ฐ๋ ์
๋ฐ์ดํธ๋ฅผ ๋ ๋๋งํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ
baseDuration, // ๋ฉ๋ชจ์ด์ ์ด์
์์ด ํ์ ํธ๋ฆฌ ์ ์ฒด๋ฅผ ๋ ๋๋งํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์์์๊ฐ
startTime, // React๊ฐ ์ธ์ ํด๋น ์
๋ฐ์ดํธ๋ฅผ ๋ ๋๋งํ๊ธฐ ์์ํ๋์ง
commitTime, // React๊ฐ ํด๋น ์
๋ฐ์ดํธ๋ฅผ ์ธ์ ์ปค๋ฐํ๋์ง
interactions // ์ด ์
๋ฐ์ดํธ์ ํด๋นํ๋ ์ํธ์์ฉ๋ค์ ์งํฉ
) {
// ๋ ๋๋ง ํ์ด๋ฐ์ ์งํฉํ๊ฑฐ๋ ๋ก๊ทธ...
}
๋ ๋๋ง ์ฑ๋ฅ ์ธก์ ์ ์ํด ๋ฐ๋ก ์ค์นํ๋ ๊ฒ์ด ์๋๋ผ Profiler๋ง์ผ๋ก๋ ๋ ๋๋ง ์๋๋ฅผ ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค. ๋ค๋ค์์ React Developer Tool์ Profiler๋ฅผ ํ์ฉํด์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํด์ผ๊ฒ ๋ค.