ํฐ์คํ ๋ฆฌ ๋ทฐ
์น ๋ ๋๋ง ๊ณผ์ _operation(layout, paint, composition)์ ๊ดํด
choi95 2021. 10. 11. 21:20ํ์ต์ ํ์์ฑ
๋ธ๋ผ์ฐ์ ๊ฐ ๋๋๋ง์ ํ๋ ๊ณผ์ ์ค operation ๋จ๊ณ์ ๊ดํด์ ์ ๋๋ก ์ง๊ณ ๋์ด๊ฐ์ผ ํ ํ์๊ฐ ์์ด ๋ณธ ํฌ์คํ ์ ์์ฑํ๊ฒ ๋์๋ค.
operation๊ณผ ๊ด๋ จ๋์ด์๋ ์ด์ ํฌ์คํ ์์๋ ํ ๋ฒ ๊ธฐ๋กํด๋ ์ ์ ์์ผ๋, ๊ฐ๋ ์ ์ผ๋ก๋ง ์ ๊ทผํ์ฌ ๋ค์ ๋ณด๋ ์ ๋๋ก ์ดํด๊ฐ ๋์ง์์ ๋ณธ ํฌ์คํ ์์ ๋ช ๊ฐ์ ์์๋ฅผ ํ ๋๋ก ๋ค์ ์ค๋ช ํด๋ณด๊ณ ์ ํ๋ค.
https://choi95.tistory.com/5?category=857835
์ง๊ธ๊น์ง ํ๋ก์ ํธ ํ๋ ๋์ค css๋ฅผ ์์ฑ ๋ฐ ์ ์ฉํ๋ฉด์ ์ ๋๋ก ์ดํด๊ฐ ๋์ง ์์ ์ฑ ๋์ด๊ฐ ๋ถ๋ถ์ด ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์์๋ค.
- ์ transform-translate ์์ฑ ๊ฐ์ ์ฌ์ฉํ์์ ๋, ์ค๋ธ์ ํธ์ ์ด๋์ ๋ํ ๊ธฐ์ค ๊ฐ์ ์ ๋์ ์ด์ง ์๊ณ ํญ์ ์ฒ์ ์์น ๊ทธ๋๋ก ์ผ๊น?
- ์ด๋ค container ๋ด์์ z-index ๊ฐ์ ์๋ฌด๋ฆฌ ๋๊ฒ ์ก์๋ ํด๋น ์ค๋ธ์ ํธ์ ๋ณํ๋ ์๋ ๊ฒ์ผ๊น?
ํด๋น ์ง๋ฌธ์ ๋ํ ๋ต์ ๋ํด ํ๋์ฉ ์์๋ฅผ ๋ค๋ฉฐ ์ดํด๋ณด์
Critical rendering path(์ฑ๋ฅ ๋ณด์ฅ ๋ ๋๋ง)
์ด์ ํฌ์คํ ์์ ๊ด๋ จ ๋ด์ฉ์ ๊ธฐ๋กํด๋์์ผ๋, ํ ๋ฒ ๋ ์์์ ํจ๊ป ๊ด๋ จ ๋ด์ฉ์ ์ดํด๋ณด์.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Render Tree์ ์ด์ ๊ณผ ์ดํ ๋จ๊ณ๋ฅผ ํฌ๊ฒ Construction ๋จ๊ณ์ Operation ๋จ๊ณ๋ฅผ ๋๋ ์ ์๋ค.
Construction ๋จ๊ณ์์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ๋งํฌ์ ๋ฌธ์์ธ HTML์ ๋ธ๋ผ์ฐ์ ๊ฐ scripting ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ DOM ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ , ๋ณธ ํ์ผ๊ณผ ๋ฐ์ธ๋ฉ๋ ๊ด๋ จ css ์์๋ค๋ฟ๋ง ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ์ ์ํ์ง ์์ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ ๋ชจ๋ ์์ฑ๊ฐ๋ค์ด cascading rules์ ๋ฐ๋ผ CSSOM(CSS Object Model)์ ๋ง๋ ๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง DOM๊ณผ CSSOM ๋ชจ๋ธ์ ์น ์์์ ์ค์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง ์์๋ค์ ์ ๋ณํ์ฌ Render Tree์ ๋ง๋ ๋ค.
์ด๋ ํ๋ ์ค์ํ๊ฒ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ์ ์ค ํ๋๊ฐ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๋ ํ ์์๋ฅผ ์ ๋ณด์ด๊ฒ ์ฒ๋ฆฌํ๋ค๊ฐ ํน์ ํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์์๊ฐ ํ๋ฉด์ ๋ณด์ด๊ฒ ํ๋ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๊ณ ์ ํ ๋, display์ ๊ฐ์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ ๋๋๋ง ๊ณผ์ ์ ์์ด์ ์์ฒญ๋ ๋นํจ์จ์ฑ์ ์ด๋ํ ์ ์๋ค.
์์ ๋งํ๋ ๋ฐ์ ๊ฐ์ด Render Tree๋ ์ค์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง ์์๋ค์ ์ ๋ณํ์ฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์์ ์์๊ฐ ๋ณด์ฌ์ง์ง ์๋๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์๋ค๋ฉด, ์ด ๊ฐ์ ๋ฐ๊พธ๊ธฐ ์ํด์๋ ๊ณต๊ฐ ์ ์ ๋ฅผ ์ํด Construction ๋จ๊ณ๋ถํฐ ๋ค์ ๋๋๋ง ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
(์ฌ์ค ๋จ๊ณ์ ์ฐจ์ด๋ฟ์ด์ง ์์์ ์ค๋ช ํ ๋ด์ฉ์ด ๋ณธ ํฌ์คํ ์์์ ์ง๋ฌธ์ ๋ต์ด๋ค)
์ด์ display์ ๊ฐ์ ์ง์ ๋ฐ๊พธ๊ธฐ ๋ณด๋จ visible์ด๋ opacity ์์ฑ ๊ฐ์ ํจ๊ณผ์ ์ด๋ค.
ํด๋น ๋ด์ฉ์์๋ ์๋ ํฌ์คํ ์์ ์ ๋ฆฌํด๋์๋ค.
https://choi95.tistory.com/95?category=857835
๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์, Render Tree๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋๋ฉด ์ด์ ๋ operation ๋จ๊ณ๊ฐ ์งํ๋๋ค.
operation ๋จ๊ณ ์ค layout ๋จ๊ณ์์๋ Render Tree์ ์ ์ฌ๋ ์ ๋ณด๋ฅผ ํ ๋๋ก ์ ์ฒด ๋ ์ด์์์ ๊ตฌ์ํ๋ค.
X์ Y ๊ทธ๋ฆฌ๊ณ ๋๋น์ ๋์ด์ ๊ฐ์ ํฌ๊ธฐ๋ค์ด ์ด ๋จ๊ณ์์ ๊ณ์ฐ์ด ๋๋ค.
์ฆ, ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ผ๋ง๋งํผ ๊ณต๊ฐ์ ํ ๋นํ๋ฉฐ ๊ทธ ๊ณต๊ฐ์ ์ด๋ค ํฌ๊ธฐ๋ก ์์๋ฅผ ๋ฐฐ์นํด์ผ ๋ ์ง ๊ณํํ๋ ๋จ๊ณ์ด๋ค.
๊ทธ ๋ค์์ผ๋ก paint ๋จ๊ณ๋ก ๋์ด์ค๋๋ฐ, ์ด๋ ์ ์ํ ์ ์ด ํด๋น ๋จ๊ณ์์ ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ฆผ(ํธ์ ์ ๊ทธ๋ฆผ์ด๋ผ๊ณ ๋งํ๊ฒ ๋ค)์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ์์ layout ๋จ๊ณ์์ ๋ฐฐ์นํด๋ ๊ฐ๊ฐ์ ์์์ ๋ํด์ ์กฐ๊ธ์ฉ ์๊ฒ ๋๋์ด์ ์ด๋ฏธ์ง(BitMap)๋ฅผ ์ค๋นํ๋ค.
์ฆ, ๊ฐ๊ฐ์ ์์์ ๋ํด์ ๋ ์ด์ด ๋ณ๋ก ์ด๋ป๊ฒ ๊ทธ๋ฆด์ง์ ๋ํด์ paint๋ฅผ ์ค๋น๋ง ํด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ด๋ ๊ฒ ํ ๋ฒ์ ๋ชจ๋ ์์๋ฅผ ๊ทธ๋ฆฌ์ง ์๊ณ ๊ฐ ์์๋ค์ ๋ํด์ ๋ ์ด์ด ๋ณ๋ก ์ค๋น๋ฅผ ํ๋ ๊ฒ์ผ๊น?
์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฑ๋ฅ ๊ฐ์ ์ ํ๊ธฐ ์ํด์์ด๋ค.
์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ์ด์ ๋ํ ํ์ ์ฒ๋ฆฌ๋ก ์ธํด ์ด๋ ํ ์์์ ์ผ๋ถ๋ถ๋ง์ด ์๊ฐ์ ์ธ ๋ณํ๊ฐ ์ผ์ด๋๋ค๊ณ ๊ฐ์ ํ์๋, ๋ง์ฝ์ ๊ฐ ์์์ ๋ํด์ ๋ ์ด์ด ๋ณ๋ก ๋๋์ด ์์ง ์๋ค๋ฉด ์ผ๋ถ๋ถ์ ๋ฐ๊พธ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์์์ ๋ํด์ ๋ณ๊ฒฝ์ ํด์ค์ผ ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
์ด์ ๋ํด ์์๋ฅผ ํ๋ฒ ์ดํด๋ณด์.
ํด๋น ์ด๋ฏธ์ง ๋ด ์น์์์ ๋๋๋ง๋ ํ๋ฉด์ ํ๋์ container ํ๊ทธ ๋ด์ ์ฌ๋ฌ ์์๊ฐ ๋ฉํ๋์ด ์๋ ๊ฐ์ฅ ๋จ์ํ ๊ตฌ์กฐ๋ฅผ ์ง๋๊ณ ์๋ค.
๋๋๋ง๋ ์นํ์ด์ง๋ฅผ ๊ฐ๋ฐ์ฐฝ ๋๊ตฌ ๋ด Layers ํ์์ผ๋ก ๋ฐ๊ฟ ๋ค์ ์ดํด๋ณด์.
ํ์ฌ๋ ๋ชจ๋ ์์๊ฐ ํ๋์ container ๋ด์ ๋ฉํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ด๊ฐ ๋ณ๋๋ก ๋๋์ด์ ธ ์์ง ์๊ณ ๋จ๋ฉด์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ฌ๊ธฐ์ imgํ๊ทธ๋ง์ container ๋ด์์ ๋ถ๋ฆฝํ์ฌ(์ค์ ๋ถ๋ฆฝํ๋ ๊ฒ์ ์๋๋ค) ๋ณ๋์ ๋ ์ด์ด๋ก ์ค์ ํด์ฃผ๊ธฐ ์ํด z-index ๊ฐ์
์ต๋ํ์ผ๋ก ์ค ๋ค ๋ค์ ํ์ธํด๋ด๋ ์ ์ด๋ฏธ์ง์ ๋ณ ๋ค๋ฅผ ๋ฐ ์์์ ํ์ธํ ์ ์๋ค.
์ด๋ z-index ๊ฐ์ ์ผ๋ง๋ฅผ ์ฃผ๋ ๊ฐ์ container์ ํด๋น img ํ๊ทธ๋ ๋ฉํ๋์ด ์์ผ๋ฉฐ ์ด๋ ๊ณง ๊ฒฐ๊ตญ์ ๋๊ฐ์ ๋ ์ด์ด๋ก์ ํ๊ธฐ๋๊ธฐ ๋๋ฌธ์ ๋๋๋ง ๊ฒฐ๊ณผ์์ ๋ณ ๋ค๋ฅธ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ ์์ด์ will-change๋ฅผ ์ด์ฉํด ๋ณผ ์ ์๋ค.
https://developer.mozilla.org/ko/docs/Web/CSS/will-change
The will-change CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.
wil-change๋ ํน์ ์์์ ๋ํด์ ์ด๋ ํ ์์ฑ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ฌ์ค์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋ ค์ฃผ์ด, ํด๋น ์์์ ๋ํด์ ๋ณ๋์ ๋ ์ด์ด๋ฅผ ์ค๋นํ๋๋ก ๋์์ผ ํ๋ค.
์ด๋ ๊ฒ๋๋ฉด img ํ๊ทธ๊ฐ ํฌํจ ๋ ๋ณ๋์ ๋ ์ด์ด๋ง ๋๋๋ง ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด container์ ๋ ์ด์ด์ ๋ํด์ ๋ค์ ๋๋๋ง ๊ณผ์ ์ ๊ฑฐ์น์ง ์์๋ ๋๊ธฐ์ ํจ์จ์ ์ด๋ค.
ํ์ง๋ง will-change์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ฒด์ ์ธ ํผํฌ๋จผ์ค์ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์๋ ์์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ฌ์ฉํ์ง ์์ ํธ์ด ์ข๋ค.
(๋ ์ด์ด๊ฐ ๋๋ฌด ๋ง์ด ์๊ธฐ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค)
์ด์ ๋ง์ง๋ง์ผ๋ก ๊ทธ๋ฆผ์์๋ ๋์ ์์ง ์์ง๋ง paint ๋จ๊ณ์์ ์ค๋นํด ๋์ ํ ๋๋ก ์ค์ ์์๋ค์ ํ๋ฉด ์์ ๋ฐฐ์นํ๊ฒ ๋๋ composition ๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค.
transform-translate ์์ฑ ๋์ ์๋ฆฌ
์ด์ ํฌ์คํ ์์ ์ฒ์ ์๋ฌธ์ด์๋ transform ์์น ๋ณ๊ฒฝ์ ๋ํ ๊ธฐ์ค์ด ์ ์์ง์ผ ๋๋ง๋ค ๋์ ์ผ๋ก ๋ณํ์ง ์๊ณ ์๋ ์์น ๊ฐ์ธ์ง์ ๋ํด์ ์ด๋ ์ ๋ ์ง์ํ ์ ์๋ค.
transform-translate ์์ฑ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด layout shift๋ ์ผ์ด๋์ง ์์ ์ฑ composition ๋จ๊ณ์์๋ง ๋ณํ๊ฐ ์ผ์ด๋๋ค.
์ฆ, ๊ธฐ์กด์ ์ค์ position ๊ฐ์ ๊ทธ๋๋ก ์ ์ง๋ ์ฑ, ํ๋ฉด์ ๋๋๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ด๋ํ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ๋ค๋ฅธ ์์์ ์์ญ์ ๋ํด์ ์ด๋ ํ ์ํฅ์ ๋ฏธ์น์ง ์์์ ์๋ฏธํ๋ค.
๋ค์ ์์ ํ๋ฉด์ ์ดํด๋ณด์.
ํ๋ฉด์์ ๋ณธ ๋ฐ์ ๊ฐ์ด rotate๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋ ์ฃผ์์ ์์์๋ ์ด๋ ํ ์ํฅ๋ ์ฃผ์ง ์์์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ฉด์ ๊ฐ์ ๋์์ wisth์ height๊ฐ์ ๋ณ๊ฒฝํ์ฌ ๋๋๋งํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
width์ height ๊ฐ์ ์ด์ฉํ์ฌ ์์์ ์คํ์ผ์ ๋ณ๊ฒฝํ๋ฉด ์ฃผ์์ ์์๋ฅผ ๋ฐ์ด๋ด๊ณ ์์น ๊ฐ์ ์ํฅ์ ์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฒฐ๋ก
๋๋๋ง ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ ๋จ์ํ will-change์ ๊ฐ์ด ํน์ ํ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธฐ ๋ณด๋จ ์ฒ์๋ถํฐ ๋งํฌ์ ์ ๊ณจ๊ฒฉ์ ์ ๋๋ก ๊ตฌ์ถํ๊ณ ์คํ์ผ ์์ฑ ๋ํ style-shift๊ฐ ์ด๋๊น์ง ๋ฏธ์น๋์ง์ ๋ํด์ ์ฌ์ ์ ๋ช ํํ ์ธ์งํ ์ฑ ์ ์ํด์ ์จ์ผ ํจ์ ๋ค์ ํ ๋ฒ ํ์ธํ ์
์์๋ค.
'HTML CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณตํต ์์ฑ์ ๋ค๋ฅธ ๊ฐ ์ ์ฉ_SCSS MIXIN (0) | 2021.11.14 |
---|---|
position ์์ฑ - relative, absolute, fixed (0) | 2021.10.06 |
float ์์ฑ์ ์ด์ฉํ์ฌ header-menu ์์น ์กฐ์ (0) | 2021.10.06 |
Semantic-Web๊ณผ SemanticTags์ ์ฐจ์ด (0) | 2021.10.05 |
์ด๋ฒคํธ ์ ์ด(pointer-events) ์์ฑ์ ํตํด ํ์ ์ฐฝ ๋นํ์ฑํ (0) | 2021.07.19 |