서버에서 웹 페이지에 필요한 HTML, CSS, Javascript, 미디어 소스(Image, Video) 등의 리소스를 다운로드할 때의 성능
HTML의 파싱을 막는 CSS나 자바스크립트의 리소스를 블록 리소스라고 한다.
//모든 유틸 함수 가져오기 (최적화 전)
import _ from 'lodash';
_.array(...);
_.object(...);
//필요한 함수만 가져오기 (최적화 후)
import array from 'lodash/array';
import object from 'lodash/fp/object';
array(...);
object(...);
페이지 화면에 주요 리소스가 페이지에 그려질 때의 성능.
레이아웃을 최대한 빠르게, 최대한 적게 발생시켜야 함 => Reflow, Repaint 최소한으로 줄여야 한다.
리플로우와 리페인트는 요소가 시각적으로 변경되었을 때, 변화를 계산하여 화면에 그려주는 작업이다.
만약 DOM이 시각적으로 변경되면 리플로우가 발생하여 렌더트리를 재생성하고,
생성된 렌더트리를 기반으로 요소를 화면에 그리는 리페인트가 발생한다.
function resizeAllParagraphs() {
const box = document.getElementById('box');
const paragraphs = document.querySelectorAll('.paragraph');
for (let i = 0; i < paragraphs.length; i += 1) {
paragraphs[i].style.width = box.offsetWidth + 'px';
}
}
// 레이아웃 스래싱을 개선한 코드
function resizeAllParagraphs() {
const box = document.getElementById('box');
const paragraphs = document.querySelectorAll('.paragraph');
const width = box.offsetWidth;
for (let i = 0; i < paragraphs.length; i += 1) {
paragraphs[i].style.width = width + 'px';
}
}
position / width / height / margin / padding / display / top / left / right / bottom / box-sizing / background-color / 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-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
transform
을,opacitiy
를 사용하는 것이 성능 개선에 좋다.lazy load를 적용하였음에도 개선되지 않은 페이지들은 주로 아래 3가지 경우가 대다수였다.
1) 용량이 너무 큰 메인이미지를 포함한 페이지(jpg/gif)
2) 자동 재생이 포함된 영상 콘텐츠가 포함된 페이지
3) 페이지 진입 시 자동 재생이 적용된 동영상 팝업이 뜨는 경우
위의 세 가지 사항 모두 개발팀 내에서 독단적으로 수정할 수 없는 사항들이라 기획팀, 디자인팀과의 협의가 필요했다.
1 용량이 큰 gif 이미지 대신 css 애니메이션으로 구현하였다.
2) 처음부터 재생되고 있던 영상을 정지상태로 두고, 유저들이 해당 영상단에 진입했을 때 자동재생 되도록 스크롤 이벤트를 추가하였다.
3)...자동 재생되는 동영상 팝업이 매출과 즉결된다 판단하여 영상 배너가 포함된 페이지들은 랜딩 속도 개선 기준을 완화하겠다는 지시가 내려왔다.
화려한 이미지와 영상들을 통한 정보 전달도 중요하지만 결국 속도가 느리고, 사용자 경험을 해치는 웹페이지라면 사용자에게 외면받을 수 밖에 없다고 생각한다. 기획단계에서부터 기획자-디자이너-개발자 간의 충분한 조율을 통해 사용자 경험에 대해 충분히 고민 한 뒤 페이지 제작이 되는 것이 중요함을 체감하였다.
또한 '프론트엔드 개발자'로서 작업 시 효율적인 코드 작성을 통해 리소스 최적화와 렌더링 성능을 최적화 할 수 있도록 다방면으로 고민해보는 것이 좋겠다.
요청 22/32 | 5.6 MB/5.7 MB 전송됨 | 5.5 MB | 5.9 MB 리소스/완료: 842밀리초
DOMContentLoaded: 790밀리초| 로드: 849밀리초
요청 7/18 | 2.8 MB/2.9 MB 전송됨 | 2.8 MB/3.0 MB 리소스 |완료: 249밀리초
|DOMContentLoaded: 286밀리초/| 로드: 286밀리초