Skip to main content

Command Palette

Search for a command to run...

모든 웹 개발자가 관심을 가져야 할 핵심 웹 지표

Published
2 min readView as Markdown
모든 웹 개발자가 관심을 가져야 할 핵심 웹 지표
J

Interested in fundamental of web develop

Core Web Vitals

구글에서 만든 것으로 웹페이지의 성능을 평가하는 지표들.

LCP

Largest Contentful Paint

페이지 로딩 성능을 의미하는 것.

의미

정확히는 '페이지가 처음으로 로드를 시작한 시점부터 뷰포트 내부에서 가장 큰 이미지 또는 텍스트를 렌더링하는 데 걸리는 시간'

뷰포트란?
사용자에게 현재 노출되는 화면. 기기마다 다르다.

'큰 이미지와 텍스트'는 아래의 요소들을 뜻한다.

  • <img>

  • <svg> 내부의 <image>

  • poster 속성을 사용하는 <video>

  • url()을 통해 불러온 배경 이미지가 있는 요소

  • 텍스트와 같이 인라인 텍스트 요소를 포함하고 있는 블록 레벨 요소

    • 이 블록 레벨 요소에는 <p>, <div> 등이 포함

각 엘리먼트가 뷰포트에 등장한 시점부터 뷰포트에서 가장 큰 텍스트 또는 이미지가 완전히 로딩되는 시점까지 걸리는 시간

-> 페이지의 정보를 화면에 전달하는 속도를 객관적으로 판단하기 위한 지표

기준 점수

2.5초 이내: 좋음

4초 이내: 보통

4초 이후: 느림

최적화

최적의 시나리오는 서버에서 빌드해온 HTML을 프리로드 스캐너가 바로 읽어서 LCP로 빠르게 가져가는 것.

  • 클라이언트에서 빌드하지 말 것

  • 이미지 용량 최적화

  • 뷰포트 영역 내에서의 css 애니메이션 줄이기

  • 리소스 직접 호스팅

FID

First Input Delay

최초 입력이 얼마나 지연되는가를 의미함.

의미

사용자가 페이지와 처음 상호 작용할 때, 브라우저가 실제로 이벤트 핸들러 처리를 시작하기까지의 시간을 측정.

화면이 최초에 그려지고 난 후, 상호작용을 수행했을 때 브라우저의 메인 스레드가 이 이벤트에 대한 반응을 할 수 있을 때까지 걸리는 시간.

이벤트 핸들러가 완료되는데 걸리는 시간은 측정하지 않음.

기준 점수

100ms 이내: 좋음

300ms 이내: 보통

300ms 이후: 나쁨

최적화

  • 꼭 웹페이지에서 해야 하는 작업인가: 오래 걸리고, 굳이 프론트에서 하지 않아도 되는 작업이라면 서버에서 처리하는 것이 낫다.

  • 긴 작업을 분리하기: 메인 스레드를 오래 점유하도록 하지 않고 쪼개서 사용자의 인터랙션을 받을 수 있도록 하자.

  • 자바스크립트 코드 최소화: 코드 스플리팅, 폴리필 최소화 등.

  • 자바스크립트 코드 실행 지연: script 태그의 async, defer를 이용한다.

    • defer: 해당 스크립트를 병렬로 다운로드 (메인 스레드 작업 멈추지 않음) 페이지 완전히 로딩된 이후에 스크립트 실행

    • async: 마찬가지로 병렬로 다운로드 후 다운로드 완료된 순서대로 실행

CLS

Cumulative Layout Shift

의미

페이지의 생명주기 동안 발생하는 모든 예기치 않은 요소 이동에 대한 지표

기준 점수

  • 영향분율: 레이아웃 이동이 발생한 요소의 전체 높이와 뷰포트 높이의 비율

  • 거리분율: 레이아웃 이동이 발생한 요소가 뷰포트 대비 얼마나 이동했는지

둘을 곱하여 최종 점수를 계산한다.

0.1 이하: 좋음

0.25 이하: 보통

그 외: 개선 필요

최적화

  • 스켈레톤 UI 적극 활용

  • 서버 사이드 렌더링

  • 폰트 로딩 최적화

핵심은 아니지만 중요한 지표

TTFB

브라우저가 웹 페이지의 첫 번째 바이트를 수신하는 데 걸리는 시간.

서버사이드 렌더링 시에 주의 깊게 봐야 한다.

FCP

LCP와 반대로 페이지 콘텐츠 중 뭐라도 뜨기 시작한 시점까지의 시간.

More from this blog

Vanilla SPA 1: JSX & Virtual DOM Diffing

대망의 나만의 리액트 스타일 SPA 만들기 시작해보겠습니다. 이번 아티클에서는 JSX 파싱 JSX to Virtual DOM Virtual DOM Diffing Commit 을 다뤄보도록 하겠습니다. JSX란? JSX란 XML 스타일의 트리 구조로 표현하고 싶은 것들을 자바스크립트와 함께 작성하는 문법입니다. JSX의 구성 요소 JSXElement: HTML element와 비슷한 역할을 하는 컴포넌트 JSXAttributes: ...

Feb 23, 20245 min read
Vanilla SPA 1: JSX & Virtual DOM Diffing

Typescript: unknown과 any의 차이

타입스크립트의 타입 시스템을 공부하다 문득 unknown도 모든 타입 다 들어가고 any도 다 들어가는데 뭐가 다른거지? 라는 생각이 들어서 무슨 차이가 있는지 찾아보았다. unknown 사용시(프로퍼티에 접근 시, 연산 시) 타입을 지정해주어야 함 다른 타입에 할당 불가능 타입의 가능성을 열어뒀다가 좁히는 용도로 사용 any 나는 타입이길 포기한다

Jan 23, 20241 min read
Typescript: unknown과 any의 차이

Modern React Deep Dive: 리액트 17, 18 변경사항

현재 인터넷에서 가장 많이 쓰이는 리액트 버전은 16 버전이다. 그 이후 버전인 17, 18 버전에서 어떠한 변화가 있었는지 살펴보자. 리액트 17 버전 리액트 17 버전은 새롭게 추가된 기능이 없으며 기존 코드의 수정을 필요로 하는 변경 사항이 최소화되어있다. 이전 버전과의 호환성을 중시하며 17 버전으로 이동하기 쉽도록 만들어져 있다. 이벤트 위임 방식 변경 이전 버전에서는 이벤트 핸들러가 문서의 루트(Document)에서 이벤트를 캐치했지...

Dec 31, 20234 min read
Modern React Deep Dive: 리액트 17, 18 변경사항

Modern React Deep Dive: 서버 사이드 렌더링

서버 사이드 렌더링 서버 사이드 렌더링(SSR)이란 웹 애플리케이션의 컨텐츠를 서버에서 렌더링하는 기법을 말한다. SSR에 대해 알아보기 전에 기존의 프론트엔드 중심 개발 방법 중 하나인 싱글 페이지 애플리케이션(SPA)를 알아본다. 싱글 페이지 애플리케이션(SPA) 과거엔 자바스크립트로 할 수 있는 일이 제한적이라 대부분의 처리를 서버에서 해야 했다. (데이터 연동, 페이지 렌더링, 인증/인가 로직 등)그 구조로 인해 관심사의 분리가 덜 이루...

Dec 6, 20232 min read
Modern React Deep Dive: 서버 사이드 렌더링

얼렁뚱땅 알잘딱깔센 개발 라이프🙌

9 posts

문의는 DM으로 부탁드려요🙏