https://web.dev/articles/dom-size-and-interactivity
ํฐ DOM ํฌ๊ธฐ๊ฐ ์ํธ์์ฉ์ ๋ฏธ์น๋ ์ํฅ๊ณผ ์ด์ ๋ํด ์ทจํ ์ ์๋ ์กฐ์น | Articles | web.dev
ํฐ DOM ํฌ๊ธฐ๋ ์ํธ์์ฉ์ด ๋น ๋ฅธ์ง ์ฌ๋ถ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. DOM ํฌ๊ธฐ์ INP์ ๊ด๊ณ, DOM ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ทจํ ์ ์๋ ์กฐ์น ๋ฐ ํ์ด์ง์ DOM ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ ๋๋ง ์์ ์ ์ ํํ๋ ๋ค
web.dev
๐ฃ๏ธ ํฌ๊ธฐ๊ฐ ํฐ ๋์ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ฒ๋ณด๋ค ์ํธ์ ์ผ๋ก ์ํฅ์ ๋ผ์น ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ด ๊ฐ์ด๋๋ ๊ทธ ์ด์ ์ ๋ํด ์ค๋ช
ํ๊ณ ์ด์ ๋ํด ์ฐ๋ฆฌ๊ฐ ์ทจํ ์ ์๋ ํ๋์ ๋ํด ์ค๋ช
ํ๋ค.
์น ํ์ด์ง๋ฅผ ๋ง๋ค ๋ ํ์ด์ง์ DOM(Document object model)์ด ์๋ค๋ ์ ์ ๋ช
๋ฐฑํ ์ฌ์ค์ด๋ค.
DOM์ ํ์ด์ง์ HTML ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๊ณ ํ์ด์ง์ ๊ตฌ์กฐ์ ๋ด์ฉ์ ์ ๊ทผํ๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ CSS๋ฅผ ๋ณด๋ธ๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์ ๋ DOM์ ์ฌ์ด์ฆ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๋๋ฐ์ ์ํฅ์ ์ค๋ค๋ ์ ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก DOM์ด ํด์๋ก ์ฒ์์ ํด๋น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ๋์ค์ ํ์ด์ง ๋ผ์ดํ์ฌ์ดํด์์ ๋ ๋๋ง์ ์
๋ฐ์ดํธํ๋๋ฐ์ ๋ ๋ง์ ๋น์ฉ์ด ๋ ๋ค.
์ด๋ DOM์ ์์ ํ๊ณ ์
๋ฐ์ดํธํ๋ ์ํธ ์์ฉ์ด ๋ง์ ํ์ด์ง์์ ๋น ๋ฅธ ์๋ต์์ ๋ฏธ์น๋ ์ํฅ์ด ๋ง์ ๋ ์ด์์ ์์
์ ๋ค๋ฃฐ ๋ ํฐ DOM์ด ๋ฌธ์ ๊ฐ ๋๋ค.
๋น์ฉ์ด ๋ง์ด ๋๋ ๋ ์ด์์ ์์
์ ํ์ด์ง์ INP(Interaction to Next Page)์ ์ํฅ์ ๋ฏธ์น๋ค. ๋ง์ฝ ํ์ด์ง๊ฐ ์ ์ ์ํธ์์ฉ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋๋ก ํ๋ ค๋ฉด DOM์ ํฌ๊ธฐ๋ฅผ ํ์ํ ๋งํผ๋ง ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โพ๏ธ ์ธ์ ํ์ด์ง์ DOM์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊น?
A: ํต์ฌ ์ฉ์ด: DOM ์์์ DOM ๋ ธ๋์ ์ฐจ์ด์ ์ ์๋ ๊ฒ์ ์ค์ํ๋ค. DOM ์์๋ DOM ํธ๋ฆฌ์ ํน์ HTML ์์๋ฅผ ๋ํ๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ DOM ๋ ธ๋๋ DOM ์์์ ์ฉ์ด์ ์ค๋ณต๋๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ง ๊ทธ๊ฒ์ ์ ์๋ ์ฃผ์, ๊ณต๋ฐฑ ๋ฐ ํ ์คํธ๋ก ํ์ฅ๋๋ค. Lighthouse์ DOM ํฌ๊ธฐ ์ธก์ ์ DOM ๋ ธ๋๋ฅผ ์ฐธ์กฐํ์ง๋ง ์ด ๊ฐ์ด๋์์๋ ๊ฐ๋ฅํ ๋๋ง๋ค DOM ๋ ธ๋๋ณด๋ค DOM ์์๋ฅผ ์ฐธ์กฐํ ๊ฒ์ด๋ค.
Lighthouse์ ๋ฐ๋ฅด๋ฉด ํ์ด์ง์ DOM์ฌ์ด์ฆ๊ฐ 1,400 ๋
ธ๋๋ฅผ ๋์๋ ๊ณผ๋ํ๋ค๊ณ ๋ณธ๋ค. Lighthouse๋ DOM์ด 800๋
ธ๋๋ฅผ ๋์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ด๊ธฐ ์์ํ๋ค.
๋ค์ HTML์ ์๋ก ๋ค์ด ๋ณด๊ฒ ๋ค:
<ul>
<li>List item one.</li>
<li>List item two.</li>
<li>List item three.</li>
</ul>
์ ์ฝ๋์๋ 4๊ฐ์ DOM ์์: <ul> ์์์ 3๊ฐ์ ํ์ ์์ <li>๊ฐ ์์ต๋๋ค. ๋น์ ์ ์น ํ์ด์ง์๋ ํ์คํ ์ด๋ณด๋ค ๋ ๋ง์ ๋
ธ๋๊ฐ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ DOM ํฌ๊ธฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ฌด์์ ํ ์ ์๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ด์ง์ DOM์ ๊ฐ๋ฅํ ํ ์๊ฒ ๋ง๋ ํ ๋ ๋๋ง ์์
์ ์ต์ ํํ๊ธฐ ์ํ ๋ค๋ฅธ ์ ๋ต๋ฟ๋ง ์๋๋ผ DOM ํฌ๊ธฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ์ด๋ค ๊ฒ์ ํ ์ ์๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โพ๏ธํฌ๊ธฐ๊ฐ ํฐ DOM์ด ์ด๋ป๊ฒ ํ์ด์ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ๊น?
ํฐ DOM์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ์ด์ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ค.
1. ํ์ด์ง๊ฐ ์ด๊ธฐ ๋ ๋๋ง๋๋ ๋์ CSS๊ฐ ํ์ด์ง์ ์ ์ฉ๋๋ฉด CSSOM(CSS ๊ฐ์ฒด ๋ชจ๋ธ)์ด๋ผ๋ DOM๊ณผ ์ ์ฌํ ๊ตฌ์กฐ๊ฐ ์์ฑ๋๋ค. CSS ์
๋ ํฐ์ ๊ตฌ์ฒด์ฑ์ด ์ฆ๊ฐํ๋ฉด์ CSSOM์ ๋ ๋ณต์กํด์ง๊ณ ์น ํ์ด์ง๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฐ์ ํ์ํ ๋ ์ด์์, ์คํ์ผ๋ง, ํฉ์น๊ธฐ ๋ฐ ํ์ธํธ ์์
์ ์คํํ๋ ๋ฐ์ ๋ ๋ง์ ์๊ฐ์ด ํ์ํ๋ค. ์ด ์ถ๊ฐ ์์
์ผ๋ก ์ธํด ํ์ด์ง ๋ก๋ ์ค ์ด๊ธฐ์ ๋ฐ์ํ๋ ์ํธ ์์ฉ์ ๋ํ ๋๊ธฐ ์๊ฐ์ด ๋์ด๋๋ค.
2. DOM์ ์์ ํ๊ฑฐ๋ ์์ ์ฝ์
ํน์ ์ญ์ ๋๋ DOM ๋ด์ฉ๊ณผ ์คํ์ผ ์์ ๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ฉด ์ด ์
๋ฐ์ดํธ๋ค์ ๋ ๋๋งํ๋ ์์
์ ๋งค์ฐ ๋ง์ ๋น์ฉ์ด ์์๋ ์ ์๋ค. CSS ์
๋ ํฐ์ ๊ตฌ์ฒด์ฑ ์ฆ๊ฐ๋ ํ์ด์ง์ ์ด๊ธฐ ๋ ๋๋ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก HTML ์์๊ฐ ์ํธ์์ฉ์ ๊ฒฐ๊ณผ๋ก DOM์ ์ฝ์
๋ ๋ ๋ ๋๋ง ์์
์ ์ถ๊ฐ๋ ์ ์๋ค.
3. JavaScript๊ฐ DOM์ ์ฟผ๋ฆฌํ ๋ DOM ์์์ ๋ํ ์ฐธ์กฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค. ์๋ฅผ ๋ค์ด document.querySelectorAll์ ํธ์ถํด ๋ชจ๋ <div>์ ํ์ด์ง์์ ์ ํํ ๋, ๋ง์ ์์ DOM์์๋ฅผ ๋ฐํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ด ์๋นํ ์ ์๋ค.
๋ชจ๋ ์ํธ ์์ฉ์ ์ํฅ์ ๋ฏธ์น์ง๋ง ์ ๋ชฉ๋ก ์ค ๋ ๋ฒ์งธ ํญ๋ชฉ์ด ํนํ ์ค์ํ๋ค. ์ํธ์์ฉ๋ค์ ์ํด DOM์ด ๋ณ๊ฒฝ๋๋ฉด ํ์ด์ง์ ์ข์ง ์์ INP์ ๊ธฐ์ฌํ ์ ์๋ ์์
์ด ์์๋ ์๋ ์๋ค.
โพ๏ธ์ด๋ป๊ฒ DOM์ฌ์ด์ฆ๋ฅผ ์ธก์ ํ ๊น?
๋น์ ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก DOM์ฌ์ด์ฆ๋ฅผ ์ธก์ ํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ Lighthouse๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. Lighthouse์์ ๊ฒ์ฌ๋ฅผ ์คํํ๋ฉด ํ์ฌ ํ์ด์ง์ DOM์ ๋ํ ํต๊ณ๊ฐ 'Diagnostics' ์ ๋ชฉ ์๋ 'Avoid an excessive DOM size(๊ณผ๋ํ DOM์ฌ์ด์ฆ ํผํ๊ธฐ)' ํญ๋ชฉ์ ํ์๋๋ค. ์ด ๋ถ๋ถ์๋ DOM ์์์ ์ด ๊ฐ์, ๊ฐ์ฅ ๋ง์ ํ์(children) ์์๋ฅผ ํฌํจํ๋ DOM ์์ ๋ฐ ๊ฐ์ฅ ๊น์ DOM ์์ ๋ํ ๋ณผ ์ ์๋ค.
๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ JavaScript ์ฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. DOM์ ์ด HTML ์์์ ๊ฐ์๋ฅผ ์ป์ผ๋ ค๋ฉด ํ์ด์ง๊ฐ ๋ก๋๋ ํ ์ฝ์์์ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค:
document.querySelectorAll('*').length;
๋ฉ๋ชจ: ์์ ์ฝ๋์๋ DOM์ HTML ์์์ ๊ฐ์๋ง ํฌํจ๋์ด ์๋ค. DOM์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํฌํจํ์ง๋ ์๋๋ค.
DOM ํฌ๊ธฐ ์
๋ฐ์ดํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ ค๋ฉด ์ฑ๋ฅ ๋ชจ๋ํฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ DOM ํฌ๊ธฐ์ ํจ๊ป ๋ ์ด์์ ๋ฐ ์คํ์ผ ์์
(๊ธฐํ ์ฑ๋ฅ ์ธก๋ฉด)๋ฑ์ ์ฐ๊ด์ํฌ ์ ์๋ค.
DOM์ ํฌ๊ธฐ๊ฐ Lighthouse DOM ํฌ๊ธฐ์ ๊ฒฝ๊ณ ๊ฐ์ ์ ๊ทผํ๊ฑฐ๋ ์คํจํ๋ ๊ฒฝ์ฐ, ๋ค์ ๋จ๊ณ๋ DOM์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์น ์ฌ์ดํธ์ INP๊ฐ ํฅ์๋ ์ ์๋๋ก ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ตํ๋ ํ์ด์ง์ ๊ธฐ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์
๋๋ค.
โพ๏ธ์ด๋ป๊ฒ ์ํธ์์ฉ์ ์ํฅ์ ๋ฐ๋ DOM ์์์ ๊ฐ์๋ฅผ ์ธก์ ํ ๊น?
์คํ์ค์์ ๋ง์ฝ ๋น์ ์ด ํ์ด์ง DOM์ ํฌ๊ธฐ๊ณผ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ์์ฌ๋๋ ๋๋ฆฐ ์ํธ์์ฉ์ ์์งํ๋ ค ํ๋ค๋ฉด, ๋น์ ์ "์คํ์ผ ์ฌ๊ณ์ฐ(Recalculate Style"์ด๋ผ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ํ๋กํ์ผ๋ฌ์์ ํ๋์ ์ ํํ์ฌ ์ํฅ์ ๋ฐ์ DOM ์์์ ๊ฐ์๋ฅผ ํ์
ํ๊ณ ์๋์ชฝ ํจ๋์์ ์ปจํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ ์ ์์ต๋๋ค.
์ ์คํฌ๋ฆฐ์ท์์ ์์
์ ์คํ์ผ ์ฌ๊ณ์ฐ(์ ํ ์)์ ์ํฅ์ ๋ฐ๋ ์์์ ๊ฐ์๊ฐ ํ์๋๋์ง ํ์ธํ๋ค. ์ ์คํฌ๋ฆฐ์ท์ ๋ง์ DOM ์์๊ฐ ์๋ ํ์ด์ง์ ๋ ๋๋ง ์์
์ DOM ํฌ๊ธฐ๊ฐ ๋ฏธ์น๋ ์ํฅ์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง, ์ด ์ ๋ณด๋ ์ด๋ค ๊ฒฝ์ฐ์๋ DOM ํฌ๊ธฐ๊ฐ ์ํธ ์์ฉ์ ์๋ตํ์ฌ ๋ค์ ํ๋ ์์ ๊ทธ๋ฆฌ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํ๊ณ ์์์ธ์ง ํ๋จํ๋ ๋ฐ์ ์ ์ฉํ๋ค.
โพ๏ธ์ด๋ป๊ฒ DOM ์ฌ์ด์ฆ๋ฅผ ์ค์ผ๊น?
๋ถํ์ํ ๋งํฌ์
์ ์ํด ์น์ฌ์ดํธ์ HTML์ ๊ฐ์ฌํ๋ ๊ฒ ์ธ์๋ DOM ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์ฃผ์ ๋ฐฉ๋ฒ์ DOM ๊น์ด๋ฅผ ์ค์ด๋ ๊ฒ์ด๋ค. DOM์ด ๋ถํ์ํ๊ฒ ๊น์ ์ ์๋ค๋ ์ ํธ ์ค์ ํ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์์ ํญ์์ ๋ค์๊ณผ ๊ฐ์ ๋งํฌ์
์ด ๋ณด์ด๋ ์ ํธ์ด๋ค.
<div>
<div>
<div>
<div>
<!-- Contents -->
</div>
</div>
</div>
</div>
์ด์ ๊ฐ์ ํจํด์ ๋ณด๋ฉด ์๋ง๋ DOM ๊ตฌ์กฐ๋ฅผ ํํํ๊ฒ ํ์ฌ ํจํด์ ๋จ์ํํ ์ ์๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด DOM ์์์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ณ ํ์ด์ง ์คํ์ผ์ ๋จ์ํํ ์ ์๋ ๊ธฐํ๊ฐ ์ฃผ์ด์ง๋ค.
DOM์ ๊น์ด๋ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ์ ์ฆ์์ผ ์๋ ์๋ค. ํนํ JSX์ ์์กดํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์ ๊ธฐ๋ฐ ํ๋ ์์ํฌ์์๋ ์์ ์ปจํ
์ด๋์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ค์ฒฉํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ๋ง์ ํ๋ ์์ํฌ์์๋ fragment๋ผ๊ณ ์๋ ค์ง ๊ฒ์ ์ฌ์ฉํ์ฌ nesting ๊ตฌ์ฑ ์์๋ฅผ ํผํ ์ ์์ต๋๋ค. fragment๋ฅผ ๊ธฐ๋ฅ์ผ๋ก ์ ๊ณตํ๋ ๊ตฌ์ฑ ์์ ๊ธฐ๋ฐ ํ๋ ์์ํฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ์๋ค(๊ทธ๋ฌ๋ ์ด์ ๊ตญํ๋์ง๋ ์๋ค):
์ ํํ ํ๋ ์์ํฌ์ fragments์ ์ฌ์ฉํ๋ฉด DOM ๊น์ด๋ฅผ ์ค์ผ ์ ์๋ค. DOM ๊ตฌ์กฐ๋ฅผ ํํํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์คํ์ผ๋ง์ ์ํฅ์ ๋ฏธ์น๋ ์ ์ด ๊ฑฑ์ ๋๋ค๋ฉด ํ๋ ์ค๋ฐ์ค(flexbox) ๋๋ ๊ทธ๋ฆฌ๋(grid)์ ๊ฐ์ ๋ณด๋ค ํ๋์ ์ธ(๋ฐ ๋ ๋น ๋ฅธ) ๋ ์ด์์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ์ ์ป์ ์ ์์ ๊ฒ์ด๋ค.
โพ๏ธ๊ธฐํ ๊ณ ๋ คํด์ผ ํ ์ ๋ต
DOM ํธ๋ฆฌ๋ฅผ ํํํ๊ฒ ํ๊ณ ๋ถํ์ํ HTML ์์๋ฅผ ์ ๊ฑฐํ์ฌ DOM์ ์ต๋ํ ์๊ฒ ์ ์งํ๋๋ผ๋ ์ฌ์ฉ์์ ์ํธ ์์ฉ์ ๋ฐ๋ผ์ ๋ณ๊ฒฝ๋ ์ ์์ด ์ฌ์ ํ ๊ฝค ํฐ ๋ ๋๋ง ์์
์ด ์์๋ ์ ์๋ค. ์ด๋ฌํ ์์น์ ์๋ค๋ฉด ๋ ๋๋ง ์์
์ ์ ํํ๊ธฐ ์ํด ๊ณ ๋ คํ ์ ์๋ ๋ค๋ฅธ ์ ๋ต์ด ์๋ค.
- ์ถ๊ฐ์ ์ธ ์ ๊ทผ๋ฒ
ํ์ด์ง๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋ ์ฒ์์ ํ์ด์ง์ ๋ง์ ๋ถ๋ถ์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ์์น์ ์์ ์ ์๋ค. ์ด๋ ์์ ์ DOM์ ํด๋น ๋ถ๋ถ์ ์๋ตํ์ฌ HTML์ ๋๋ฆฌ๊ฒ ๋ก๋ํ์ง๋ง, ์ฌ์ฉ์๊ฐ ํ์ด์ง์์ ์ด๊ธฐ์ ์จ๊ฒจ์ง ์ธก๋ฉด์ ํ์ด์ง์์ ํ์ํ ๋ถ๋ถ๊ณผ ์ํธ ์์ฉํ ๋ ์ถ๊ฐ๋ ์ ์๊ธฐ๋ ํ๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ด๊ธฐ์ ๋ก๋๋ ๋์ ์๋ง๋ ์ดํ์๋ ์ ์ฉํ๋ค. ์ด๊ธฐ ํ์ด์ง ๋ก๋์ ๊ฒฝ์ฐ, ๋ ์ ์ ๋ ๋๋ง ์์
์ ์์์ ์ํํ๊ฒ ๋๋ค. ์ฆ, ์ด๊ธฐ HTML ํ์ด๋ก๋๊ฐ ๋ ๊ฐ๋ฒผ์์ง๊ณ ๋ ๋นจ๋ฆฌ ๋ ๋๋ง๋๋ค. ์ด๋ ์ค์ํ ๊ธฐ๊ฐ ๋์ ๋ฉ์ธ ์ค๋ ๋์ ๊ด์ฌ์ ๋๊ธฐ ์ํด ๊ฒฝ์์ ๋ ํ๋ฉด์ ์คํํ ์ ์๋ ๋ ๋ง์ ๊ธฐํ๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ค.
๋ง์ฝ ํ์ด์ง ์ด๊ธฐ ๋ก๋์์ ์จ๊ฒจ์ง ๋ถ๋ถ์ด ๋ง๋ค๋ฉด ๋ฆฌ๋ ๋๋ง ์์
์ ์ ๋ฐํ๋ ๋ค๋ฅธ ์ํธ์์ฉ๋ค์ ์๋๋ฅผ ๋์ผ ์ ์๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ํธ ์์ฉ์ด DOM์ ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ํ์ด์ง ์๋ช
์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ DOM์ด ์ฆ๊ฐํ๋ฉฐ ๋ ๋๋ง ์์
์ด ์ฆ๊ฐํ๋ค.
์๊ฐ์ด ์ง๋๋ฉด์ DOM์ ์ถ๊ฐํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ์ ์์ผ๋ฉฐ ๊ณ ์ ํ ์ ์ถฉ์ ์ด ์๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๋ํ ์๋ต์ผ๋ก ํ์ด์ง์ ์ถ๊ฐํ๋ ค๋ HTML์ ์ฑ์ฐ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด ๋คํธ์ํฌ ์์ฒญ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ค๊ฐ ๋คํธ์ํฌ ์์ฒญ์ INP์ ํฌํจ๋์ง ์์ง๋ง ์ธ์ง๋ ์ง์ฐ ์๊ฐ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ก๋ฉ ์คํผ๋ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค์์ ํ์ํด ์ฌ์ฉ์๊ฐ ๋ฌด์ธ๊ฐ๊ฐ ๋ฐ์ํ๊ณ ์์์ ์๋๋ก ํ๋ค.
โพ๏ธCSS ์ ๋ ํฐ์ ๋ณต์ก์ฑ ์ ํ
๋ธ๋ผ์ฐ์ ๊ฐ CSS์ ์
๋ ํฐ๋ฅผ ํ์ฑํ ๋ ํด๋น ์
๋ ํฐ๊ฐ ํ์ฌ ๋ ์ด์์์ ์ ์ฉ๋๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ ค๋ฉด DOM ํธ๋ฆฌ๋ฅผ ํก๋จํด์ผ ํ๋ค. ์ด๋ฌํ css ์
๋ ํฐ๋ค์ด ๋ณต์กํ ์๋ก, ๋ธ๋ผ์ฐ์ ๋ ํ์ด์ง์ ์ด๊ธฐ ๋ ๋๋ง๋ฟ๋ง ์๋๋ผ, ์ํธ์์ฉ์ ๊ฒฐ๊ณผ๋ก ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์คํ์ผ ์ฌ๊ณ์ฐ ๋ฐ ๋ ์ด์์ ์์
์ ์ฆ๊ฐ์ํค๊ธฐ ์ํด ๋ ๋ง์ ์์
์ ์ํํด์ผ ํ๋ค.
๋ ์์๋ณด๊ธฐ: ์คํ์ผ ๊ณ์ฐ์ ๋ณต์ก์ฑ๊ณผ ์ค์ฝํ ์ค์ด๊ธฐ
โพ๏ธ content-visibility ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ผ
CSS๋ ํ๋ฉด ๋ฐ DOM์์๋ฅผ ๋๊ธํ๊ฒ ๋ ๋๋งํ ์ ์๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ธ content-visibility ํ๋กํผํฐ๋ฅผ ์ ๊ณตํ๋ค. ์์๋ค์ด ๋ทฐํฌํธ์ ์ ๊ทผํ๋ฉด ํ์์ ๋ฐ๋ผ ๋ ๋๋ง๋๋ค. content-visibility์ ์ด์ ์ ์ด๊ธฐ ํ์ด์ง ๋ ๋๋ง์ ์๋นํ ์์ ๋ ๋๋ง ์์ ์ ์ค์ฌ์ค ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์์ ์ํธ์์ฉ์ผ๋ก ํ์ด์ง DOM์ด ๋ณ๊ฒฝ๋ ๋ ์คํ์คํฌ๋ฆฐ ์์ ๋ ๋๋ง ์์ ์ ์๋ตํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ ์์๋ณด๊ธฐ: content-visibility: ๋ ๋๋ง ํผํฌ๋จผ์ค๋ฅผ ์ฌ๋ ค์ฃผ๋ ์๋ก์ด CSS ํ๋กํผํฐ
๐ ๊ฒฐ๋ก
DOM ์ฌ์ด์ฆ๋ฅผ ํ์ํ๊ฒ์ผ๋ก๋ง ์ค์ด๋ ๊ฒ์ด ๋น์ ์ ์น์ฌ์ดํธ์ INP๋ฅผ ์ต์ ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด DOM์ด ์ ๋ฐ์ดํธ๋ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ์ด์์ ๋ฐ ๋ ๋๋ง ์์ ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค. ๋น์ ์ด DOM ํฌ๊ธฐ๋ฅผ ์๋ฏธ ์๊ฒ ์ค์ผ ์ ์๋๋ผ๋ ๋ ๋๋ง ์์ ์ DOM ํ์ ํธ๋ฆฌ๋ก ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ CSS containment ๋ฐ content-visibility ํ๋กํผํฐ ๊ฐ์ ๋ช ๊ฐ์ง ๊ธฐ์ ์ด ์๋ค.
๊ทธ๋ฌ๋ ๋ ๋๋ง ์์ ์ ์ต์ํํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค๊ณ ํ์ด์ง๊ฐ ์ํธ ์์ฉ์ ๋ฐ์ํด ์ํํ๋ ๋ ๋๋ง ์์ ์ ์์ ์ค์ด๋ฉด ์น ์ฌ์ดํธ๊ฐ ์ฌ์ฉ์์ ์ํธ ์์ฉํ ๋ ๋ ์ ๋ฐ์ํ๋ค๊ณ ๋๋ ์ ์๋ค. ์ฆ, ์น ์ฌ์ดํธ์ ๋ํ INP๊ฐ ๋ฎ์์ง๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋๋ค.
'Developing๐ฉโ๐ป > Front-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[typescript] ์กฐ๊ฑด๋ณ ํ์ ์ ํ๊ธฐ (0) | 2024.03.05 |
---|---|
[React] state์ ๋ณ๊ฒฝ๊ณผ lodash์ debounce๋ฅผ ๋์์ ํธ์ถํ๊ธฐ (0) | 2024.03.04 |
[๋ฒ์ญ] React19์ ๋์ ๋๋ ์๋ก์ด clien-side hook๋ค (0) | 2024.02.12 |
[javascript] ์ ์ ํ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌํ ๋น๊ต (0) | 2024.02.04 |
[javascript] ํ์ผ ํ์ฅ์ ์ ๋๋ก ์ ์ ์๋ ๋ฒ ๐ (0) | 2024.02.01 |