์นํฉ#
์นํฉ์ static module bundler์ด๋ค.
์นํฉ์ ์ํธ๋ฆฌ ํฌ์ธํธ๋ถํฐ ํ๋ก์ธ์คํ์ฌ, ์์กดํ๊ณ ์๋ ๋ชจ๋์ ๋ํด ๋ด๋ถ์ ์ผ๋ก dependency graph๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ต์ข ์ ์ผ๋ก ํ๋์ ๋ฒ๋ค ํ์ผ์ ๊ตฌ์ฑํ๋ค .
Entry : dependency graph๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์์ํ ์ง์ ์
Output : ๋ฒ๋ค๋ ๊ฒฐ๊ณผ ํ์ผ
Loader : ๊ธฐ๋ณธ์ ์ผ๋ก js, json ํ์ผ๋ง ๊ฐ์ ธ์ฌ ์ ์์ง๋ง, loader๋ ์นํฉ์ด ๋ค๋ฅธ์ ํ์ ํ์ผ๋ ๋ชจ๋๋ก์ ๊ฐ์ ธ์ค๊ณ dependency graph๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ก ํด์ค๋ค. ex) jpg ์ด๋ฏธ์ง, ํฐํธ, ...
Plugin : ๋ฒ๋ค๋ง ์ต์ ํ, ์์ ๊ด๋ฆฌ, ํ๊ฒฝ ๋ณ์์ ์ฃผ์ ๋ฑ ๋ค์ํ ๋ชฉ์ ์ ํ๊ฒฝ ์ค์ ์ ์ํด ์ฌ์ฉ.
Mode : production | development ๋ฑ ํ๊ฒฝ์ ๋ฐ๋ผ ์นํฉ์ ์ค์ ํ ์ ์๋ค.
HTTP#
HTTP ๋ฒ์ ๋ณ ์ฐจ์ด์ #
HTTP/0.9#
์ด๊ธฐ ๋ฒ์
GET์ด ์ ์ผํ ๋ฉ์๋HTTP ํค๋๊ฐ ์์๊ณ HTML ํ์ผ๋ง ์ ์ก๋ ์ ์์์.
์ํ๋ ์ค๋ฅ ์ฝ๋๋ ์์๋ค.
HTTP/1.0#
๋ฒ์ ์ ๋ณด๊ฐ ์์ฒญ์ผ๋ก ์ ์ก๋๊ธฐ ์์ ex)
GET /mypage.html HTTP/1.0์ํ ์ฝ๋๊ฐ ์๋ต์ ์์ ๋ถ๋ถ์ ๋ถ์ด ์ ์ก๋จ.
HTTP ํค๋ ๊ฐ๋ ์ด ๋์ ๋จ.
- HTML ํ์ผ ์ธ์ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ์ ์กํ ์ ์๊ฒ ๋จ.
HTTP/1.1#
HTTP์ ์ฒซ ๋ฒ์งธ ํ์ค ๋ฒ์
์ปค๋ฅ์ ์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ๋จ.
- ์๋ณธ ๋ฌธ์ ๋ด์ ์๋ฒ ๋๋ ๋ฆฌ์์ค๋ฅผ ์ํด์, ๊ธฐ์กด์ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์ ๋ค์ ์ฌ์ฉํ ์ ์์.
ํ์ดํ๋ผ์ด๋์ผ๋ก ์ฒซ ๋ฒ์งธ ์์ฒญ์ ๋ํ ์๋ต์ด ์์ ํ ์ ์ก๋๊ธฐ ์ ์ ๋ ๋ฒ์งธ ์์ฒญ์ ์ก์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.

HTTP/2#
์ด์ง ํ๋กํ ์ฝ (1.1์ ํ ์คํธ ํ๋กํ ์ฝ)
Multiplexing


โ
multiplexingvspipelining
pipelining์ ์์๊ฐ ์ค์ํ๋ค โ Head Of Line blocking ๋ฌธ์
multiplexing์ ์์๊ฐ ์ค์ํ์ง ์๋ค.

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. ๊ณผ๋ถํ ๋ฑ์ผ๋ก ๋น์ฅ ์๋น์ค๊ฐ ๋ถ๊ฐ๋ฅํ ์ํ
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ #


DOM ๋ฐ CSSOM ํธ๋ฆฌ๋ ๊ฒฐํฉ๋์ด ๋ ๋๋ง ํธ๋ฆฌ๋ฅผ ํ์ฑํฉ๋๋ค.
๋ ๋๋ง ํธ๋ฆฌ์๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๋ ธ๋๋ง( ๋ฉํ ํ๊ทธ, ์คํฌ๋ฆฝํธํ๊ทธ,
display: none๋ฑ์ด ์ ์ธ๋จ. )ํฌํจ๋ฉ๋๋ค.โ
visibility: hidden,display: none์ ๋ค๋ฅด๋ค.๋ ์ด์์์ ๊ฐ ๊ฐ์ฒด์ ์ ํํ ์์น ๋ฐ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. (๊ฒฝ์ฐ์ ๋ฐ๋ผ "๋ฆฌํ๋ก์ฐ" ๋ผ๊ณ ๋ ํ๋ค.)
๋ง์ง๋ง ๋จ๊ณ๋ ์ต์ข ๋ ๋๋ง ํธ๋ฆฌ์์ ์ํ๋๋ ํ์ธํธ์ด๋ฉฐ, ํฝ์ ์ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. (๊ฒฝ์ฐ์ ๋ฐ๋ผ "๋ฆฌํ์ธํธ"๋ผ๊ณ ๋ ํ๋ค.)
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์ต์ ํ#
์ค๋๋ ๋๋ถ๋ถ์ ๊ธฐ๊ธฐ๋ ์ด๋น 60ํ(60fps)์ ๋น๋๋ก ํ๋ฉด์ ์๋ก ๊ณ ์น๋ค. ๋ฐ๋ผ์๊ฐ ํ๋ ์์๋ 16ms ๊ฐ๋์ ์๊ฐ๋ง ํ ๋น๋๋ค. (1์ด / 60 = 16.66ms) ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ ์ค๋น๋ฅผ ํ๋ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ 10ms ๋ด์ ๋ชจ๋ ์์ ์ ์๋ฃํด์ผ ํ๋ค.
ํฝ์ ํ์ดํ๋ผ์ธ#


์๋ฐ์คํฌ๋ฆฝํธ : ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๊ฐ์ ๋ณํ๋ฅผ ์ผ์ผํค๋ ์์ . CSS Animation, Transitions, Web Animation API ์ญ์ ํฌํจ.
์คํ์ผ ๊ณ์ฐ : ์ด๋ค ์คํ์ผ ๊ท์น(CSS)์ ์ด๋ค ์์์ ์ ์ฉํ ์ง ๊ณ์ฐํ๋ ํ๋ก์ธ์ค
๋ ์ด์์ : ํ๋ฉด์์ ์ผ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์ด๋์ ๋ฐฐ์น๋๋์ง ๊ณ์ฐํ๊ธฐ ์์ํ ์ ์๋ค.
ํ์ธํธ : ํฝ์ ์ ์ฑ์ฐ๋ ํ๋ก์ธ์ค. ํ ์คํธ, ์, ์ด๋ฏธ์ง, ๊ฒฝ๊ณ ๋ฐ ๊ทธ๋ฆผ์ ๋ฑ ๋ชจ๋ ์๊ฐ์ ๋ถ๋ถ์ ๊ทธ๋ฆฌ๋ ์์ . ๋ ์ด์ด๋ผ๊ณ ํ๋ ๋ค์์ ํ๋ฉด์์ ์ํ
ํฉ์ฑ : ํ์ด์ง์ ์ฌ๋ฌ ๋ถ๋ถ์ด ์ฌ๋ฌ ๋ ์ด์ด๋ก ๊ทธ๋ ค์ก๊ธฐ ๋๋ฌธ์ ํ์ด์ง๊ฐ ์ ํํ๋ ๋๋ง ๋๋ ค๋ฉด ์ ํํ ์์๋ก ํ๋ฉด์ ๊ทธ๋ ค์ผ ํ๋ค.
โ ์ฝ๋๊ฐ ํ์ดํ๋ผ์ธ์ ์ด๋ค ๋ถ๋ถ์ ํธ๋ฆฌ๊ฑฐ ํ๋์ง ์ ํํ ์ดํดํ๋ ๊ฒ์ด ์ค์
1. JS / CSS > ์คํ์ผ > ๋ ์ด์์ > ํ์ธํธ > ํฉ์ฑ#

๋ ์ด์์ ๋๋น, ๋์ด, ์ผ์ชฝ ๋๋ ์๋จ ์์น ๋ฑ ์์์ ๊ธฐํํ์ ํํ์ ์ํฅ์ ์ฃผ๋ "layout" ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅธ ๋ชจ๋ ์์๋ฅผ ํ์ธํ๊ณ ํ์ด์ง์ ๋ํด "๋ฆฌํ๋ก์ฐ"๋ฅผ ์ํํด์ผ ํ๋ค. ์ํฅ์ ๋ฐ์ ์์ญ์ด ์์ผ๋ฉด ๋ค์ ํ์ธํธํ๊ณ , ๋ค์ํฉ์ฑํด์ผ ํ๋ค.
2. JS / CSS > ์คํ์ผ > ํ์ธํธ > ํฉ์ฑ#

ํ์ด์ง์ ๋ ์ด์์์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง, ํ ์คํธ ์์, ๊ทธ๋ฆผ์ ๋ฑ์ "paint only" ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ์ด์์์ ๊ฑด๋๋ฐ๊ณ ํ์ธํธ ์์ , ํฉ์ฑ ์์ ์ ์ํํ๋ค.
3. JS / CSS > ์คํ์ผ > ํฉ์ฑ#

๋ ์ด์์๊ณผ ํ์ธํธ๊ฐ ํ์ ์๋ ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ํฉ์ฑ ๋จ๊ณ๋ก ๊ฑด๋ ๋ด๋ค. ๊ฐ์ฅ ์ด์์ ์ด๊ณ ๋น์ฉ์ด ๊ฐ์ฅ ์ ๊ฒ ๋๋ ๋ฒ์ ์ด๋ค. ( ํ์ฌ ๋ถํฉ๋๋ ์์ฑ์ transform , opacity 2๊ฐ์ง ๋ฟ์ด๋ค. )
โ CSS ์์ฑ์ด ์ด๋ค ๋ฒ์ ์ ํธ๋ฆฌ๊ฑฐํ ์ง ์๊ณ ์ถ์ ๊ฒฝ์ฐ CSS ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฐธ์กฐ. ๋๋ ์ด ๋งํฌ ์ฐธ์กฐ
์ฐธ๊ณ ์๋ฃ#
Rendering Performance | Web Fundamentals | Google Developers
์ด๋ฏธ์ง ๋ ์ด์ง๋ก๋#
The Complete Guide to Lazy Loading Images | CSS-Tricks