SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
© 2018 NHN FORWARD. All rights reserved.
프런트 엔드 성능 최적화
유동식
FE개발랩
GOAL
로딩
프런트 엔드
성능
렌더링
= +
CONTENTS
1. 로딩 최적화
 브라우저 기준 최적화의 문제점
 사용자 기준 최적화
 프리 렌더러
 PWA 사례
2. 렌더링 최적화
 레이아웃 스래싱
 가상돔
 웹 워커
4 / 73
프런트 엔드 화려한 변화
2018년 TOAST UI2009년 라이코스
5 / 73
느리다…
성능 문제
내용이 길어지면 느려집니다.
Internet Explorer 11에서 로딩이 느립니다.
때때로 멈춰요.
스크롤이 툭툭 끊어져요.
간혹 몇 분씩도 걸리는 것 같습니다 ㅜㅜ
6 / 73
성능 최적화
빠른 로딩 속도
사업지표 향상
사용성 개선
성능 개선 효과
7 / 73
Pinterest
https://medium.com/dev-channel/a-pinterest-progressive-web-app-performance-case-study-3bd6ed2e6154
8 / 73
빠르게 만들어 봅시다
개선 전 개선 후
로딩 최적화: 브라우저
10 / 73
Navigation Timing
Resource Timing(Network)
11 / 73
프런트 엔드 타이밍
12 / 73
Only Network Fast 3G
최적화 전 데모
시작 8초 로딩 완료4초 프로그레스바
13 / 73
Navigation Timing
start Load
8초
DOMContentLoaded
4초
LoadProcessing
14 / 73
문제 확인: Processing
3.88초 프로그레스 바
4.72초 의미 있는 화면
시작 8초 로딩 완료4초 프로그레스바
15 / 73
처리 순서: HTML, CSS, JS
문제: 빈 화면 원인 찾기
16 / 73
블록 리소스 발생
문제: 빈 화면 원인 찾기
CSS, JS로 인한: HTML 파싱 중단
17 / 73
주요 렌더링 경로
DOM Tree
CSSOM Tree
Render Tree
18 / 73
주요 렌더링 경로: HTML, CSS
HTML - DOM CSS- CSSOM Render Tree
19 / 73
블록 리소스: 자바스크립트와 CSS 파일
문제 해결: 블록 리소스 처리 최적화
CSS
DOM Tree
CSSOM Tree
Render Tree
자바스크립트
20 / 73
...
<link href="bundle.css" rel="stylesheet">
<script type="text/javascript" src="bundle.js"></script>
</head>
자바스크립트 로드 시점 최적화
<body>
...
<script type="text/javascript" src="bundle.js"></script>
</body>
...
<link href="bundle.css" rel="stylesheet">
<script type="text/javascript" src="bundle.js" async></script>
</head>
<head>에 JS: X
</body>에 JS: O
<head>에 JS async(defer): O
위치 변경 / async, defer
21 / 73
빠름
DOMContentLoaded: 자바스크립트
Processing
Processing
head: 3.88 초
async: 1.40 초
start DOMContentLoaded
22 / 73
주요 렌더링 경로: 스타일
Resource Timing(Network)
23 / 73
주요 렌더링 경로: 스타일
총 걸린 시간: 758ms
실제 다운로드: 191ms
24 / 73
...
<link href="bundle.css" rel="stylesheet">
...
</head>
HTML에 스타일을 직접 포함
CSS파일과 인라인 스타일
...
<style>
.icon-back-sky {
background-image: url(image/5c8cc826b16fd0b85fca7f58d30cba9f.png);
background-position: -1260px -224px;
width: 384px;
height: 224px;
}
...
</style>
...
</head>
외부 스타일
인라인 스타일
25 / 73
2x 빠름
DOMContentLoaded: 스타일
Processing
Processing
외부 스타일: 1.40 초
인라인 스타일: 0.72 초
start
DOMContentLoaded
26 / 73
보다 빠른 반응
주요 렌더링 경로 최적화 데모 비교
4초 프로그레스바 0.7초 프로그레스바
27 / 73
Navigation Timing: Resource, Processing, Load
브라우저 기준의 로딩 최적화 정리
로딩과 Critical Rendering Path 관계
로딩 성능: 자바스크립트 최적화(async, defer)
로딩 성능: 인라인 스타일 사용(Resource Timing: TTFB 줄이기)
빠른 DOMContentLoaded
빠른 로딩 프로그레스바
28 / 73
로딩 프로그레스바만 빠르다
브라우저 기준의 문제점: 데모 비교
4초 프로그레스바, 8초 완료 0.7초 프로그레스바, 8초 완료
29 / 73
빠른 DOMContentLoaded
start Load
8초
DOMContentLoaded
4초
LoadProcessing
DOMContentLoaded
0.7초
LoadProcessing
30 / 73
진짜 콘텐츠가 나오는 시점
start 진짜 콘텐츠 Load
8초
LoadProcessing
DOMContentLoaded
0.7초
의미 있는 콘텐츠
4.72초
31 / 73
Navigation Timing이 빠르면 정말 성능이 좋은 것인가?
로딩 최적화 기준: Navigation Timing
DOMContentLoaded load
로딩 최적화: 사용자
33 / 73
CONTENTS
1. 로딩 최적화
 브라우저 기준 최적화의 문제점
 사용자 기준 최적화
 프리 렌더러
 PWA 사례
2. 렌더링 최적화
 레이아웃 스래싱
 가상돔
 웹 워커
35 / 73
User Centric Performance Metrics
로딩 성능 기준: 사용자
First Paint First Meaningful Paint Time To Interactive
36 / 73
First Meaningful Paint: 사용자에게 필요한 정보를 빠르게
서버 사이드 렌더링
SPA
SSR
37 / 73
런타임 vs 빌드타임
서버 사이드 렌더링과 프리 렌더러
구분 서버 사이드 렌더링 프리 렌더러
콘텐츠
First Meaningful Paint O O
생성 시점
런타임 빌드타임
38 / 73
프리 렌더러: 웹팩 prerender-loader
8초 로딩 완료
1초
First Meaningful Paint
프로그레스바
… … … …
39 / 73
빠른 페인팅
start DOMContentLoaded
2.7초
First Meaningful Paint
First Meaningful Paint
40 / 73
First Meaningful Paint > Navigation Timing
사용자 기준의 로딩 최적화 정리
서버 사이드 렌더링
프리 렌더러와 FMP
데모: FMP 비교
Progressive Web App
42 / 73
로딩 성능 최적화: PWA
PRPL 패턴
WebPWA App
= +
Push Render Pre-cache Lazy-load
43 / 73
PWA
빠른 로딩 속도
사업지표 향상
사용성 개선
PWA: 로딩 성능 개선 효과
44 / 73
PWA 사례: BookMyShow
인도 티케팅 회사
https://developers.google.com/web/showcase/2017/bookmyshow
항목 값
월 방문자 5천 만명
앱 사이즈 440KB로 감소
로딩 타임 2.94초 미만
전환율 80% 증가
45 / 73
PWA 사례: MakeMyTrip
인도 여행 회사
https://developers.google.com/web/showcase/2017/make-my-trip
항목 값
월 방문자 8백 만명
로딩 속도 38% 개선
고객 세션 160% 증가
이탈율 20% 감소
46 / 73
브라우저 기준 최적화
• Navigation Timing, Critical Rendering Path
• DOMContentLoaded(JS, CSS), 빠른 로딩 프로그레스바
로딩 최적화 정리
사용자 기준 최적화
• First Meaningful Paint
• 서버사이드 렌더링, 프리 렌더러
PWA 사례로 본 로딩 성능 개선 효과
• BookMyShow, MakeMyTrip
렌더링 최적화
48 / 73
CONTENTS
1. 로딩 최적화
 브라우저 기준 최적화의 문제점
 사용자 기준 최적화
 프리 렌더러
 PWA 사례
2. 렌더링 최적화
 레이아웃 스래싱
 가상돔
 웹 워커
49 / 73
강제 동기 레이아웃
레이아웃 스래싱
50 / 73
DOM 조작으로 인한 변경 단계
HTML - DOM CSS- CSSOM Render Tree
51 / 73
DOM 조작으로 인한 변경 단계
HTML - DOM CSS- CSSOM Render Tree
52 / 73
개발자 도구: 한 프레임 약 70ms
레이아웃 스래싱
DOM CSSOM Layout
53 / 73
30FPS: 강제 동기 레이아웃 발생
강제 동기 레이아웃
offsetLeft
offsetTop
offsetWidth
…
…
DOM CSSOM Layout
54 / 73
60FPS: 강제 레이아웃 제거
강제 동기 레이아웃
55 / 73
개선된 렌더링 데모 비교
56 / 73
CONTENTS
1. 로딩 최적화
 브라우저 기준 최적화의 문제점
 사용자 기준 최적화
 프리 렌더러
 PWA 사례
2. 렌더링 최적화
 레이아웃 스래싱
 가상돔
 웹 워커
57 / 73
위클리픽: Proxy와 가상돔을 사용한 데모
가상돔: DOM변경을 최소화
58 / 73
일부 엘리먼트만 바꾸고 싶다면 추가 코드가 필요
예> 초의 엘리먼트만 업데이트하고 싶을때
데모: DOM 직접 변경
59 / 73
알아서 바뀐 엘리먼트만 변경되는 편리함
snabbdom > 초의 엘리먼트만 업데이트됨
데모: 가상돔 사용
60 / 73
CONTENTS
1. 로딩 최적화
 브라우저 기준 최적화의 문제점
 사용자 기준 최적화
 프리 렌더러
 PWA 사례
2. 렌더링 최적화
 레이아웃 스래싱
 가상돔
 웹 워커
61 / 73
60 FPS = 16ms/fr => 10ms/fr
프레임 속도
62 / 73
메인 스레드에서 무거운 작업
63 / 73
무거운 메인 스레드 데모
무거운 작업
오래 걸리는 프레임
64 / 73
웹팩 설정 파일
worker-loader 사용
65 / 73
job.worker.js
66 / 73
워커 생성과 실행
67 / 73
Heavy Job
웹 워커
짧은 프레임 짧은 프레임
워커가 무거운 작업 담당
68 / 73
워커 사용 전 후 렌더링 데모 비교
69 / 73
로딩 최적화: 브라우저 기준 (DOMContentLoaded, load)
전체 정리
로딩 최적화: 사용자 기준 (Critical Rendering Path, FMP, SSR)
로딩 최적화: Progressive Web App 사례
렌더링 최적화: 레이아웃 스래싱
렌더링 최적화: 가상돔
렌더링 최적화: 웹 워커
70 / 73
그림
 TOAST UI - https://ui.toast.com/
 핀터레스트 사례 - https://medium.com/dev-channel/a-pinterest-progressive-web-app-performance-case-study-3bd6ed2e6154
 PRPL - https://developers.google.com/web/fundamentals/performance/prpl-pattern/
 PWA 사례 - https://www.pwastats.com/
 Navigation Timing Model - https://www.w3.org/TR/navigation-timing-2/
 First Meaningful Paint – AddyOsmani - Google https://twitter.com/addyosmani/status/760490332983177216
 데모 소스 – https://gitlab.com/fedevlab/2018-nhn-forward-demo
 데모 - https://dongsik-yoo.github.io/2018-nhn-forward-demo/index.html
 Proxy와 가상돔을 사용하여 나만의 프레임워크 만들기 - https://meetup.toast.com/posts/158
참고 자료
71 / 73
자바스크립트 교육 / 전사 개발 가이드
FE개발랩
TOAST UI 핸즈온 랩에 참여해보세요.
© 2018 NHN FORWARD. All rights reserved.
Q&A
© 2018 NHN FORWARD. All rights reserved.
THANK YOU

Más contenido relacionado

La actualidad más candente

[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.Wooram Hwang
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
The Future of QA at Atlassian
The Future of QA at AtlassianThe Future of QA at Atlassian
The Future of QA at AtlassianAtlassian
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum GatheringBDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum GatheringElias Nogueira
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅영기 김
 
채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례John Kim
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressWalmyr Lima e Silva Filho
 
An overview of selenium webdriver
An overview of selenium webdriverAn overview of selenium webdriver
An overview of selenium webdriverAnuraj S.L
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화NAVER D2
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례SangIn Choung
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
Lessons Learned from Using Next.js in Production
Lessons Learned from Using Next.js in ProductionLessons Learned from Using Next.js in Production
Lessons Learned from Using Next.js in ProductionPanjamapong Sermsawatsri
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
OSCP Preparation Guide @ Infosectrain
OSCP Preparation Guide @ InfosectrainOSCP Preparation Guide @ Infosectrain
OSCP Preparation Guide @ InfosectrainInfosecTrain
 
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기NAVER D2
 

La actualidad más candente (20)

SRE passo a passo
SRE passo a passoSRE passo a passo
SRE passo a passo
 
[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
React vac pattern
React vac patternReact vac pattern
React vac pattern
 
The Future of QA at Atlassian
The Future of QA at AtlassianThe Future of QA at Atlassian
The Future of QA at Atlassian
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum GatheringBDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅
 
채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례
 
Cypress
CypressCypress
Cypress
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
An overview of selenium webdriver
An overview of selenium webdriverAn overview of selenium webdriver
An overview of selenium webdriver
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
Lessons Learned from Using Next.js in Production
Lessons Learned from Using Next.js in ProductionLessons Learned from Using Next.js in Production
Lessons Learned from Using Next.js in Production
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
OSCP Preparation Guide @ Infosectrain
OSCP Preparation Guide @ InfosectrainOSCP Preparation Guide @ Infosectrain
OSCP Preparation Guide @ Infosectrain
 
Selenium Primer
Selenium PrimerSelenium Primer
Selenium Primer
 
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
 

Similar a [2018] 프런트엔드 성능 최적화

프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기Chang W. Doh
 
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기SangJin Kang
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017Wonsuk Lee
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer ModelHan Lee
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)IMQA
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER Engineering
 
High performance websites v1.0
High performance websites v1.0High performance websites v1.0
High performance websites v1.0Byungsun Youn
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기SangJin Kang
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startupJunHo Yoon
 
웹스트리밍동영상보안자료
웹스트리밍동영상보안자료웹스트리밍동영상보안자료
웹스트리밍동영상보안자료시온시큐리티
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화Byung Ho Lee
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER Engineering
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 

Similar a [2018] 프런트엔드 성능 최적화 (20)

프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
High performance websites v1.0
High performance websites v1.0High performance websites v1.0
High performance websites v1.0
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startup
 
Essencia 2017
Essencia 2017Essencia 2017
Essencia 2017
 
웹스트리밍동영상보안자료
웹스트리밍동영상보안자료웹스트리밍동영상보안자료
웹스트리밍동영상보안자료
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 
Brava! Enterprise
Brava! EnterpriseBrava! Enterprise
Brava! Enterprise
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 

Más de NHN FORWARD

[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템NHN FORWARD
 
[2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿![2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿!NHN FORWARD
 
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)NHN FORWARD
 
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN FORWARD
 
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기NHN FORWARD
 
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례NHN FORWARD
 
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)NHN FORWARD
 
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for DeveloperNHN FORWARD
 
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBANHN FORWARD
 
[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic systemNHN FORWARD
 
[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기NHN FORWARD
 
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)NHN FORWARD
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기NHN FORWARD
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기NHN FORWARD
 
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례NHN FORWARD
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자NHN FORWARD
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩NHN FORWARD
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션NHN FORWARD
 
[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우NHN FORWARD
 
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인NHN FORWARD
 

Más de NHN FORWARD (20)

[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템
 
[2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿![2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿!
 
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
 
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
 
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
 
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
 
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
 
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
 
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
 
[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system
 
[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기
 
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우
 
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
 

Último

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Último (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

[2018] 프런트엔드 성능 최적화

  • 1. © 2018 NHN FORWARD. All rights reserved. 프런트 엔드 성능 최적화 유동식 FE개발랩
  • 3. CONTENTS 1. 로딩 최적화  브라우저 기준 최적화의 문제점  사용자 기준 최적화  프리 렌더러  PWA 사례 2. 렌더링 최적화  레이아웃 스래싱  가상돔  웹 워커
  • 4. 4 / 73 프런트 엔드 화려한 변화 2018년 TOAST UI2009년 라이코스
  • 5. 5 / 73 느리다… 성능 문제 내용이 길어지면 느려집니다. Internet Explorer 11에서 로딩이 느립니다. 때때로 멈춰요. 스크롤이 툭툭 끊어져요. 간혹 몇 분씩도 걸리는 것 같습니다 ㅜㅜ
  • 6. 6 / 73 성능 최적화 빠른 로딩 속도 사업지표 향상 사용성 개선 성능 개선 효과
  • 8. 8 / 73 빠르게 만들어 봅시다 개선 전 개선 후
  • 10. 10 / 73 Navigation Timing Resource Timing(Network)
  • 11. 11 / 73 프런트 엔드 타이밍
  • 12. 12 / 73 Only Network Fast 3G 최적화 전 데모 시작 8초 로딩 완료4초 프로그레스바
  • 13. 13 / 73 Navigation Timing start Load 8초 DOMContentLoaded 4초 LoadProcessing
  • 14. 14 / 73 문제 확인: Processing 3.88초 프로그레스 바 4.72초 의미 있는 화면 시작 8초 로딩 완료4초 프로그레스바
  • 15. 15 / 73 처리 순서: HTML, CSS, JS 문제: 빈 화면 원인 찾기
  • 16. 16 / 73 블록 리소스 발생 문제: 빈 화면 원인 찾기 CSS, JS로 인한: HTML 파싱 중단
  • 17. 17 / 73 주요 렌더링 경로 DOM Tree CSSOM Tree Render Tree
  • 18. 18 / 73 주요 렌더링 경로: HTML, CSS HTML - DOM CSS- CSSOM Render Tree
  • 19. 19 / 73 블록 리소스: 자바스크립트와 CSS 파일 문제 해결: 블록 리소스 처리 최적화 CSS DOM Tree CSSOM Tree Render Tree 자바스크립트
  • 20. 20 / 73 ... <link href="bundle.css" rel="stylesheet"> <script type="text/javascript" src="bundle.js"></script> </head> 자바스크립트 로드 시점 최적화 <body> ... <script type="text/javascript" src="bundle.js"></script> </body> ... <link href="bundle.css" rel="stylesheet"> <script type="text/javascript" src="bundle.js" async></script> </head> <head>에 JS: X </body>에 JS: O <head>에 JS async(defer): O 위치 변경 / async, defer
  • 21. 21 / 73 빠름 DOMContentLoaded: 자바스크립트 Processing Processing head: 3.88 초 async: 1.40 초 start DOMContentLoaded
  • 22. 22 / 73 주요 렌더링 경로: 스타일 Resource Timing(Network)
  • 23. 23 / 73 주요 렌더링 경로: 스타일 총 걸린 시간: 758ms 실제 다운로드: 191ms
  • 24. 24 / 73 ... <link href="bundle.css" rel="stylesheet"> ... </head> HTML에 스타일을 직접 포함 CSS파일과 인라인 스타일 ... <style> .icon-back-sky { background-image: url(image/5c8cc826b16fd0b85fca7f58d30cba9f.png); background-position: -1260px -224px; width: 384px; height: 224px; } ... </style> ... </head> 외부 스타일 인라인 스타일
  • 25. 25 / 73 2x 빠름 DOMContentLoaded: 스타일 Processing Processing 외부 스타일: 1.40 초 인라인 스타일: 0.72 초 start DOMContentLoaded
  • 26. 26 / 73 보다 빠른 반응 주요 렌더링 경로 최적화 데모 비교 4초 프로그레스바 0.7초 프로그레스바
  • 27. 27 / 73 Navigation Timing: Resource, Processing, Load 브라우저 기준의 로딩 최적화 정리 로딩과 Critical Rendering Path 관계 로딩 성능: 자바스크립트 최적화(async, defer) 로딩 성능: 인라인 스타일 사용(Resource Timing: TTFB 줄이기) 빠른 DOMContentLoaded 빠른 로딩 프로그레스바
  • 28. 28 / 73 로딩 프로그레스바만 빠르다 브라우저 기준의 문제점: 데모 비교 4초 프로그레스바, 8초 완료 0.7초 프로그레스바, 8초 완료
  • 29. 29 / 73 빠른 DOMContentLoaded start Load 8초 DOMContentLoaded 4초 LoadProcessing DOMContentLoaded 0.7초 LoadProcessing
  • 30. 30 / 73 진짜 콘텐츠가 나오는 시점 start 진짜 콘텐츠 Load 8초 LoadProcessing DOMContentLoaded 0.7초 의미 있는 콘텐츠 4.72초
  • 31. 31 / 73 Navigation Timing이 빠르면 정말 성능이 좋은 것인가? 로딩 최적화 기준: Navigation Timing DOMContentLoaded load
  • 33. 33 / 73 CONTENTS 1. 로딩 최적화  브라우저 기준 최적화의 문제점  사용자 기준 최적화  프리 렌더러  PWA 사례 2. 렌더링 최적화  레이아웃 스래싱  가상돔  웹 워커
  • 34.
  • 35. 35 / 73 User Centric Performance Metrics 로딩 성능 기준: 사용자 First Paint First Meaningful Paint Time To Interactive
  • 36. 36 / 73 First Meaningful Paint: 사용자에게 필요한 정보를 빠르게 서버 사이드 렌더링 SPA SSR
  • 37. 37 / 73 런타임 vs 빌드타임 서버 사이드 렌더링과 프리 렌더러 구분 서버 사이드 렌더링 프리 렌더러 콘텐츠 First Meaningful Paint O O 생성 시점 런타임 빌드타임
  • 38. 38 / 73 프리 렌더러: 웹팩 prerender-loader 8초 로딩 완료 1초 First Meaningful Paint 프로그레스바 … … … …
  • 39. 39 / 73 빠른 페인팅 start DOMContentLoaded 2.7초 First Meaningful Paint First Meaningful Paint
  • 40. 40 / 73 First Meaningful Paint > Navigation Timing 사용자 기준의 로딩 최적화 정리 서버 사이드 렌더링 프리 렌더러와 FMP 데모: FMP 비교
  • 42. 42 / 73 로딩 성능 최적화: PWA PRPL 패턴 WebPWA App = + Push Render Pre-cache Lazy-load
  • 43. 43 / 73 PWA 빠른 로딩 속도 사업지표 향상 사용성 개선 PWA: 로딩 성능 개선 효과
  • 44. 44 / 73 PWA 사례: BookMyShow 인도 티케팅 회사 https://developers.google.com/web/showcase/2017/bookmyshow 항목 값 월 방문자 5천 만명 앱 사이즈 440KB로 감소 로딩 타임 2.94초 미만 전환율 80% 증가
  • 45. 45 / 73 PWA 사례: MakeMyTrip 인도 여행 회사 https://developers.google.com/web/showcase/2017/make-my-trip 항목 값 월 방문자 8백 만명 로딩 속도 38% 개선 고객 세션 160% 증가 이탈율 20% 감소
  • 46. 46 / 73 브라우저 기준 최적화 • Navigation Timing, Critical Rendering Path • DOMContentLoaded(JS, CSS), 빠른 로딩 프로그레스바 로딩 최적화 정리 사용자 기준 최적화 • First Meaningful Paint • 서버사이드 렌더링, 프리 렌더러 PWA 사례로 본 로딩 성능 개선 효과 • BookMyShow, MakeMyTrip
  • 48. 48 / 73 CONTENTS 1. 로딩 최적화  브라우저 기준 최적화의 문제점  사용자 기준 최적화  프리 렌더러  PWA 사례 2. 렌더링 최적화  레이아웃 스래싱  가상돔  웹 워커
  • 49. 49 / 73 강제 동기 레이아웃 레이아웃 스래싱
  • 50. 50 / 73 DOM 조작으로 인한 변경 단계 HTML - DOM CSS- CSSOM Render Tree
  • 51. 51 / 73 DOM 조작으로 인한 변경 단계 HTML - DOM CSS- CSSOM Render Tree
  • 52. 52 / 73 개발자 도구: 한 프레임 약 70ms 레이아웃 스래싱 DOM CSSOM Layout
  • 53. 53 / 73 30FPS: 강제 동기 레이아웃 발생 강제 동기 레이아웃 offsetLeft offsetTop offsetWidth … … DOM CSSOM Layout
  • 54. 54 / 73 60FPS: 강제 레이아웃 제거 강제 동기 레이아웃
  • 55. 55 / 73 개선된 렌더링 데모 비교
  • 56. 56 / 73 CONTENTS 1. 로딩 최적화  브라우저 기준 최적화의 문제점  사용자 기준 최적화  프리 렌더러  PWA 사례 2. 렌더링 최적화  레이아웃 스래싱  가상돔  웹 워커
  • 57. 57 / 73 위클리픽: Proxy와 가상돔을 사용한 데모 가상돔: DOM변경을 최소화
  • 58. 58 / 73 일부 엘리먼트만 바꾸고 싶다면 추가 코드가 필요 예> 초의 엘리먼트만 업데이트하고 싶을때 데모: DOM 직접 변경
  • 59. 59 / 73 알아서 바뀐 엘리먼트만 변경되는 편리함 snabbdom > 초의 엘리먼트만 업데이트됨 데모: 가상돔 사용
  • 60. 60 / 73 CONTENTS 1. 로딩 최적화  브라우저 기준 최적화의 문제점  사용자 기준 최적화  프리 렌더러  PWA 사례 2. 렌더링 최적화  레이아웃 스래싱  가상돔  웹 워커
  • 61. 61 / 73 60 FPS = 16ms/fr => 10ms/fr 프레임 속도
  • 62. 62 / 73 메인 스레드에서 무거운 작업
  • 63. 63 / 73 무거운 메인 스레드 데모 무거운 작업 오래 걸리는 프레임
  • 64. 64 / 73 웹팩 설정 파일 worker-loader 사용
  • 66. 66 / 73 워커 생성과 실행
  • 67. 67 / 73 Heavy Job 웹 워커 짧은 프레임 짧은 프레임 워커가 무거운 작업 담당
  • 68. 68 / 73 워커 사용 전 후 렌더링 데모 비교
  • 69. 69 / 73 로딩 최적화: 브라우저 기준 (DOMContentLoaded, load) 전체 정리 로딩 최적화: 사용자 기준 (Critical Rendering Path, FMP, SSR) 로딩 최적화: Progressive Web App 사례 렌더링 최적화: 레이아웃 스래싱 렌더링 최적화: 가상돔 렌더링 최적화: 웹 워커
  • 70. 70 / 73 그림  TOAST UI - https://ui.toast.com/  핀터레스트 사례 - https://medium.com/dev-channel/a-pinterest-progressive-web-app-performance-case-study-3bd6ed2e6154  PRPL - https://developers.google.com/web/fundamentals/performance/prpl-pattern/  PWA 사례 - https://www.pwastats.com/  Navigation Timing Model - https://www.w3.org/TR/navigation-timing-2/  First Meaningful Paint – AddyOsmani - Google https://twitter.com/addyosmani/status/760490332983177216  데모 소스 – https://gitlab.com/fedevlab/2018-nhn-forward-demo  데모 - https://dongsik-yoo.github.io/2018-nhn-forward-demo/index.html  Proxy와 가상돔을 사용하여 나만의 프레임워크 만들기 - https://meetup.toast.com/posts/158 참고 자료
  • 71. 71 / 73 자바스크립트 교육 / 전사 개발 가이드 FE개발랩 TOAST UI 핸즈온 랩에 참여해보세요.
  • 72. © 2018 NHN FORWARD. All rights reserved. Q&A
  • 73. © 2018 NHN FORWARD. All rights reserved. THANK YOU