
display: none 과 같이 화면에 보이지 않는 요소는 렌더 트리에 포함되지 않는다.position, width, height, margin, padding,
border, border-width, font-size, font-weight,
line-height, text-align, overflow,
top, left, right, bottom
...background, color, text-decoration
border, outline, visibility
...레이아웃 변경 최소화하기
top, left 대신 translate css 속성을 사용해 위치 변경하기.display: none 사용 자제하기
display: none을 설정하거나 해제하면 브라우저가 해당 요소를 레이아웃에서 제거하고 다시 계산해야 한다.visibility: hidden 으로 대체하여 사용하기.CSS 속성 축약 및 리팩토링
/* 축약 전 */
padding-top: 4px;
padding-right: 4px;
padding-bottom: 4px;
padding-left: 4px;
/* 축약 후(최적화) */
margin: 4px;
@media 쿼리 최소화flex, grid 사용하기
Lazy Loading 사용하기
애니메이션, 트랜지션 최적화 → GPU 가속 적용하기
transform, opacityopacity: 1 로 적용할 경우 GPU가 트리거되지 않아 레이아웃 단계가 발생하게 된다. 이 경우 opacity: 0.99 로 바꾸면 reflow가 발생하지 않는다.width, height, margin, padding, top, leftCSS will-change 속성 사용하기
CSS contain 속성 사용하기
특정 요소를 문서 트리에서 독립되어 있음을 나타낼 때 사용하며, 연산 과정을 격리시킬 수 있다.
/* 키워드 값 */
contain: none; /* 격리없이 평범하게 렌더링함 */
contain: strict; /* style을 제외한 모든 격리 규칙을 적용함 */
contain: content; /* size와 style을 제외한 모든 격리 규칙 */
contain: size; /* 요소의 크기를 계산할 때 자손의 크기는 고려하지 않아도 됨을 나타냄 */
contain: layout; /* 요소 외부의 어느 것도 내부 레이아웃 영향을 주지 않음 */
contain: style; /* 요소 자신과 자손 외에도 영향을 주는 속성이라도 그 영향 범위가 자신을 벗어나지 않음 */
contain: paint; /* 요소가 화면 밖에 위치할 경우 당연히 그 안의 자손도 화면 안에 들어오지 않을 것이므로 브라우저는 그 안 요소 고려하지 않음 */
GPU 가속이란?
브라우저가 애니메이션이나 그래픽 작업을 처리할 때 CPU 대신 GPU(Graphics Processing Unit)를 활용해서 성능을 최적화하는 방법. GPU는 복잡한 그래픽 연산을 빠르게 처리할 수 있기 때문에, 특히 애니메이션이나 복잡한 시각적 효과에서 중요한 역할을 함.