๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

201108

ยท ์•ฝ 8๋ถ„

์›นํŒฉ#

  • ์›นํŒฉ์€ static module bundler์ด๋‹ค.

  • ์›นํŒฉ์€ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๋ถ€ํ„ฐ ํ”„๋กœ์„ธ์Šคํ•˜์—ฌ, ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ dependency graph๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•œ๋‹ค .

    • Entry : dependency graph๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ง„์ž…์ 

    • Output : ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ ํŒŒ์ผ

    • Loader : ๊ธฐ๋ณธ์ ์œผ๋กœ js, json ํŒŒ์ผ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, loader๋Š” ์›นํŒฉ์ด ๋‹ค๋ฅธ์œ ํ˜•์˜ ํŒŒ์ผ๋„ ๋ชจ๋“ˆ๋กœ์„œ ๊ฐ€์ ธ์˜ค๊ณ  dependency graph๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ex) jpg ์ด๋ฏธ์ง€, ํฐํŠธ, ...

    • Plugin : ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™”, ์ž์› ๊ด€๋ฆฌ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ฃผ์ž… ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์˜ ํ™˜๊ฒฝ ์„ค์ •์„ ์œ„ํ•ด ์‚ฌ์šฉ.

    • Mode : production | development ๋“ฑ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์›นํŒฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

HTTP#

HTTP ๋ฒ„์ „๋ณ„ ์ฐจ์ด์ #

HTTP์˜ ์ง„ํ™”

HTTP/0.9#

  • ์ดˆ๊ธฐ ๋ฒ„์ „

  • GET ์ด ์œ ์ผํ•œ ๋ฉ”์„œ๋“œ

  • HTTP ํ—ค๋”๊ฐ€ ์—†์—ˆ๊ณ  HTML ํŒŒ์ผ๋งŒ ์ „์†ก๋  ์ˆ˜ ์žˆ์—ˆ์Œ.

  • ์ƒํƒœ๋‚˜ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋„ ์—†์—ˆ๋‹ค.

HTTP/1.0#

  • ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ์š”์ฒญ์œผ๋กœ ์ „์†ก๋˜๊ธฐ ์‹œ์ž‘ ex) GET /mypage.html HTTP/1.0

  • ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์‘๋‹ต์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ถ™์–ด ์ „์†ก๋จ.

  • HTTP ํ—ค๋” ๊ฐœ๋…์ด ๋„์ž…๋จ.

    • HTML ํŒŒ์ผ ์™ธ์— ๋‹ค๋ฅธ ๋ฌธ์„œ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

HTTP/1.1#

  • HTTP์˜ ์ฒซ ๋ฒˆ์งธ ํ‘œ์ค€ ๋ฒ„์ „

  • ์ปค๋„ฅ์…˜์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

    • ์›๋ณธ ๋ฌธ์„œ ๋‚ด์— ์ž„๋ฒ ๋“œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์œ„ํ•ด์„œ, ๊ธฐ์กด์— ์—ฐ๊ฒฐ๋œ ์ปค๋„ฅ์…˜์„ ๋‹ค์‹œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Œ.
  • ํŒŒ์ดํ”„๋ผ์ด๋‹์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์™„์ „ํžˆ ์ „์†ก๋˜๊ธฐ ์ „์— ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์ „์†ก์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ๋‹ค.

2020-11-08-201108-image-0

HTTP/2#

  • ์ด์ง„ ํ”„๋กœํ† ์ฝœ (1.1์€ ํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ)

  • Multiplexing

2020-11-08-201108-image-1

2020-11-08-201108-image-2

โ˜ multiplexing vs pipelining

  • pipelining์€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค โ†’ Head Of Line blocking ๋ฌธ์ œ

  • multiplexing์€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

2020-11-08-201108-image-3

HTTP 1.1 vs HTTP.2 vs HTTP/2 with Push - Manning

HTTP ์ƒํƒœ ์ฝ”๋“œ#

1xx : ์ •๋ณด ์‘๋‹ต#

2xx : ์„ฑ๊ณต ์‘๋‹ต#

  • 200 : OK. ์š”์ฒญ ์„ฑ๊ณต

  • 201 : Created. ์ƒ์„ฑ ์š”์ฒญ ์„ฑ๊ณต

  • 202 : Accepted. ์š”์ฒญ ์ˆ˜๋ฝ

  • 204 : ์„ฑ๊ณตํ–ˆ์œผ๋‚˜ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด ์—†์Œ

3xx : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฉ”์‹œ์ง€#

  • 300 : Multiple choices. ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ ๊ฒฐ๊ณผ ๋ชฉ๋ก

  • 301 , 302 , 303 : Redirect. ๋ฆฌ์†Œ์Šค ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ

  • 304 : Not modified. ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Œ

4xx : ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ ์‘๋‹ต#

  • 400 : Bad Request. ์š”์ฒญ ์˜ค๋ฅ˜

  • 401 : Unauthorized. ๊ถŒํ•œ ์—†์Œ

  • 403 : Forbidden. ์š”์ฒญ ๊ฑฐ๋ถ€

  • 404 : Not Fount. ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ

5xx : ์„œ๋ฒ„ ์—๋Ÿฌ ์‘๋‹ต#

  • 500 : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋ชปํ•จ

  • 501 : Not Implemented. ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์š”์ฒญ

  • 503 : Service Unavailable. ๊ณผ๋ถ€ํ•˜ ๋“ฑ์œผ๋กœ ๋‹น์žฅ ์„œ๋น„์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •#

2020-11-08-201108-image-4

2020-11-08-201108-image-5

  • DOM ๋ฐ CSSOM ํŠธ๋ฆฌ๋Š” ๊ฒฐํ•ฉ๋˜์–ด ๋ Œ๋”๋ง ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋ Œ๋”๋ง ํŠธ๋ฆฌ์—๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ( ๋ฉ”ํƒ€ ํƒœ๊ทธ, ์Šคํฌ๋ฆฝํŠธํƒœ๊ทธ, display: none ๋“ฑ์ด ์ œ์™ธ๋จ. )ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

    โ˜ visibility: hidden , display: none ์€ ๋‹ค๋ฅด๋‹ค.

  • ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ ๊ฐ์ฒด์˜ ์ •ํ™•ํ•œ ์œ„์น˜ ๋ฐ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. (๊ฒฝ์šฐ์— ๋”ฐ๋ผ "๋ฆฌํ”Œ๋กœ์šฐ" ๋ผ๊ณ ๋„ ํ•œ๋‹ค.)

  • ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ์ตœ์ข… ๋ Œ๋”๋ง ํŠธ๋ฆฌ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ํŽ˜์ธํŠธ์ด๋ฉฐ, ํ”ฝ์…€์„ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. (๊ฒฝ์šฐ์— ๋”ฐ๋ผ "๋ฆฌํŽ˜์ธํŠธ"๋ผ๊ณ ๋„ ํ•œ๋‹ค.)


๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์ตœ์ ํ™”#

์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๊ธฐ๋Š” ์ดˆ๋‹น 60ํšŒ(60fps)์˜ ๋นˆ๋„๋กœ ํ™”๋ฉด์„ ์ƒˆ๋กœ ๊ณ ์นœ๋‹ค. ๋”ฐ๋ผ์„œ๊ฐ ํ”„๋ ˆ์ž„์—๋Š” 16ms ๊ฐ€๋Ÿ‰์˜ ์‹œ๊ฐ„๋งŒ ํ• ๋‹น๋œ๋‹ค. (1์ดˆ / 60 = 16.66ms) ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ ์ค€๋น„๋ฅผ ํ•˜๋Š” ์‹œ๊ฐ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 10ms ๋‚ด์— ๋ชจ๋“  ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•œ๋‹ค.

ํ”ฝ์…€ ํŒŒ์ดํ”„๋ผ์ธ#

2020-11-08-201108-image-6

2020-11-08-201108-image-7

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์‹œ๊ฐ์  ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ์ž‘์—…. CSS Animation, Transitions, Web Animation API ์—ญ์‹œ ํฌํ•จ.

  • ์Šคํƒ€์ผ ๊ณ„์‚ฐ : ์–ด๋–ค ์Šคํƒ€์ผ ๊ทœ์น™(CSS)์„ ์–ด๋–ค ์š”์†Œ์— ์ ์šฉํ• ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

  • ๋ ˆ์ด์•„์›ƒ : ํ™”๋ฉด์—์„œ ์–ผ๋งˆ์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์–ด๋””์— ๋ฐฐ์น˜๋˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํŽ˜์ธํŠธ : ํ”ฝ์…€์„ ์ฑ„์šฐ๋Š” ํ”„๋กœ์„ธ์Šค. ํ…์ŠคํŠธ, ์ƒ‰, ์ด๋ฏธ์ง€, ๊ฒฝ๊ณ„ ๋ฐ ๊ทธ๋ฆผ์ž ๋“ฑ ๋ชจ๋“  ์‹œ๊ฐ์  ๋ถ€๋ถ„์„ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…. ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•˜๋Š” ๋‹ค์ˆ˜์˜ ํ‘œ๋ฉด์—์„œ ์ˆ˜ํ–‰

  • ํ•ฉ์„ฑ : ํŽ˜์ด์ง€์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๊ทธ๋ ค์กŒ๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€๊ฐ€ ์ •ํ™•ํžˆ๋ Œ๋”๋ง ๋˜๋ ค๋ฉด ์ •ํ™•ํ•œ ์ˆœ์„œ๋กœ ํ™”๋ฉด์— ๊ทธ๋ ค์•ผ ํ•œ๋‹ค.

โ˜ ์ฝ”๋“œ๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์–ด๋–ค ๋ถ€๋ถ„์„ ํŠธ๋ฆฌ๊ฑฐ ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

1. JS / CSS > ์Šคํƒ€์ผ > ๋ ˆ์ด์•„์›ƒ > ํŽ˜์ธํŠธ > ํ•ฉ์„ฑ#

2020-11-08-201108-image-8

๋ ˆ์ด์•„์›ƒ ๋„ˆ๋น„, ๋†’์ด, ์™ผ์ชฝ ๋˜๋Š” ์ƒ๋‹จ ์œ„์น˜ ๋“ฑ ์š”์†Œ์˜ ๊ธฐํ•˜ํ•™์  ํ˜•ํƒœ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” "layout" ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๊ณ  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด "๋ฆฌํ”Œ๋กœ์šฐ"๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์˜ํ–ฅ์„ ๋ฐ›์€ ์˜์—ญ์ด ์žˆ์œผ๋ฉด ๋‹ค์‹œ ํŽ˜์ธํŠธํ•˜๊ณ , ๋‹ค์‹œํ•ฉ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

2. JS / CSS > ์Šคํƒ€์ผ > ํŽ˜์ธํŠธ > ํ•ฉ์„ฑ#

2020-11-08-201108-image-9

ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ ์ƒ‰์ƒ, ๊ทธ๋ฆผ์ž ๋“ฑ์˜ "paint only" ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ํŽ˜์ธํŠธ ์ž‘์—…, ํ•ฉ์„ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

3. JS / CSS > ์Šคํƒ€์ผ > ํ•ฉ์„ฑ#

2020-11-08-201108-image-10

๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŠธ๊ฐ€ ํ•„์š” ์—†๋Š” ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ฉ์„ฑ ๋‹จ๊ณ„๋กœ ๊ฑด๋„ˆ ๋›ด๋‹ค. ๊ฐ€์žฅ ์ด์ƒ์ ์ด๊ณ  ๋น„์šฉ์ด ๊ฐ€์žฅ ์ ๊ฒŒ ๋“œ๋Š” ๋ฒ„์ „์ด๋‹ค. ( ํ˜„์žฌ ๋ถ€ํ•ฉ๋˜๋Š” ์†์„ฑ์€ transform , opacity 2๊ฐ€์ง€ ๋ฟ์ด๋‹ค. )

โ˜ CSS ์†์„ฑ์ด ์–ด๋–ค ๋ฒ„์ „์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ง€ ์•Œ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ CSS ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ฐธ์กฐ. ๋˜๋Š” ์ด ๋งํฌ ์ฐธ์กฐ

์ฐธ๊ณ ์ž๋ฃŒ#

Rendering Performance | Web Fundamentals | Google Developers


์ด๋ฏธ์ง€ ๋ ˆ์ด์ง€๋กœ๋“œ#

Lazy-loading images

The Complete Guide to Lazy Loading Images | CSS-Tricks