Open young-02 opened 9 months ago
로딩 최적화 와 렌덜이 최적화로 구분하여 방법을 작성한다.
웹 페이지 렌더링 최적화의 목표는 리플로우를 최대한 적게 발생시키면서, 빠르게 화면을 그리는 것
리플로우 레이아웃의 넓이, 높이, 위치 등에 영향을 주는 CSS속성을 변경할 경우 'Layout'부터 다시 그려지게 된다. 이를 리플로우 라고 한다 position / width / height / margin / padding / display / top / left / right / bottom / box-sizing / border-color / text-align / border / border-width / font-family / float / font-size / font-weight / line-height / vertical-align / white-space / word-wrap / text-overflow / text-shadow ...
리플로우 레이아웃의 넓이, 높이, 위치 등에 영향을 주는 CSS속성을 변경할 경우 'Layout'부터 다시 그려지게 된다. 이를 리플로우 라고 한다
position / width / height / margin / padding / display / top / left / right / bottom / box-sizing / border-color / text-align / border / border-width / font-family / float / font-size / font-weight / line-height / vertical-align / white-space / word-wrap / text-overflow / text-shadow ...
리페인트 레이아웃에 영향을 주지 않는 속성을 변경하면 레이아웃을 건너뛰고 페인트 작업부터 다시 수행하게 되는데 이를 리페인트라고 한다. color / border-style / visibility / background / background-color / background-image / background-position / background-repeat / background-size / text-decoration / outline / outline-style / outline-color / outline-width / border-radius / box-shadow ... 리플로우와 리페인트를 발생시키지 않는 속성 opacity / transform / cursor / z-index ...
리페인트 레이아웃에 영향을 주지 않는 속성을 변경하면 레이아웃을 건너뛰고 페인트 작업부터 다시 수행하게 되는데 이를 리페인트라고 한다.
color / border-style / visibility / background / background-color / background-image / background-position / background-repeat / background-size / text-decoration / outline / outline-style / outline-color / outline-width / border-radius / box-shadow ...
리플로우와 리페인트를 발생시키지 않는 속성
opacity / transform / cursor / z-index ...
리플로우가 일어나면 브라우저가 전체 픽셀을 다시 계산해야 하기 때문에 리페인트 속성을 사용하여 스타일을 작성하는 것이 성능면에서 좋다.
사용하지 않는 CSS 제거 lighthouse 에서 확인후 제거한다.
간결한 스타일 작성 복잡한 셀렉터는 지양한다. 레이아웃을 그리는데 시간 소요가 된다.
인라인 스타일을 사용하지 않는다.
복잡한 DOM 지양 자식요소가 많을 수록 DOM트리가 커지며 계산해야는 것들이 많아진다. (불필요한 div wrapper)
css 통해 구현 하는 것이 성능면에서 좋다
transform은 리플로우와 리페인트 모두 발생시키지 않고 합성만 발생시키는 속성이며 사용시 렌더링 속도를 향샹 시킬수 있다.
transform
position설정 시 absolute나 fixed로 설정하면 주변 요소에 영향을 주지 않는다.
강제 동기 레이아웃 피하기/레이아웃 스레싱(thrashing) 피하기
<!-- 병렬 다운로드 & 즉시실행 --> <script async src="test.js"></script>
```null <script> - 반드시 순서대로 실행되어야 할때 <script async> - 빨리 실행되어야 할때 <script defer> - 마지막에 파싱해도 상관없을때
<source srcset="mob.webp" media="(max-width: 760px)">
<img src="item.jpg" loading="lazy" alt>
모듈 번들러 웹팩을 사용하여 css와 js파일을 번들링(하나의 파일로 묶는다.)해 리소스 요청을 줄일 수 있다.
UglifyJS 사용하여 js 파일을 압축한다.
유저에게 많은 콘튼츠를 손실없이 빠르게 전달하는 서비스
html,css,js,image 첫 요청시 내려 받은 뒤 특정 위치에 복사본을 저장하고 이후 동일한 URI의 리소스 요청이 왔을 때 이전에 저장해둔 파일을 사용하여 더빠르게 로딩하는데 사용
https://ui.toast.com/fe-guide/ko_PERFORMANCE
로딩 최적화 와 렌덜이 최적화로 구분하여 방법을 작성한다.
렌더링 최적화
웹 페이지 렌더링 최적화의 목표는 리플로우를 최대한 적게 발생시키면서, 빠르게 화면을 그리는 것
1. CSS 최적화
리플로우가 일어나면 브라우저가 전체 픽셀을 다시 계산해야 하기 때문에 리페인트 속성을 사용하여 스타일을 작성하는 것이 성능면에서 좋다.
사용하지 않는 CSS 제거 lighthouse 에서 확인후 제거한다.
간결한 스타일 작성 복잡한 셀렉터는 지양한다. 레이아웃을 그리는데 시간 소요가 된다.
2. HTML최적화
인라인 스타일을 사용하지 않는다.
복잡한 DOM 지양 자식요소가 많을 수록 DOM트리가 커지며 계산해야는 것들이 많아진다. (불필요한 div wrapper)
3. 애니메이션 최적화
css 통해 구현 하는 것이 성능면에서 좋다
transform
은 리플로우와 리페인트 모두 발생시키지 않고 합성만 발생시키는 속성이며 사용시 렌더링 속도를 향샹 시킬수 있다.position설정 시 absolute나 fixed로 설정하면 주변 요소에 영향을 주지 않는다.
4. JS 최적화
강제 동기 레이아웃 피하기/레이아웃 스레싱(thrashing) 피하기
로딩 최적화
1. 렌더 블로킹 최적화
2. 이미지 최적화
3. 웹팩(webpack)사용
모듈 번들러 웹팩을 사용하여 css와 js파일을 번들링(하나의 파일로 묶는다.)해 리소스 요청을 줄일 수 있다.
4. Gzip 사용
5. js 압축
UglifyJS 사용하여 js 파일을 압축한다.
6. CDN
유저에게 많은 콘튼츠를 손실없이 빠르게 전달하는 서비스
7. 캐싱
html,css,js,image 첫 요청시 내려 받은 뒤 특정 위치에 복사본을 저장하고 이후 동일한 URI의 리소스 요청이 왔을 때 이전에 저장해둔 파일을 사용하여 더빠르게 로딩하는데 사용