Salangdung_i์˜ ๊ธฐ๋ก

๋ธŒ๋ผ์šฐ์ €์˜ ๋žœ๋”๋ง(async/defer) ๋ณธ๋ฌธ

WEB FRONT END/JavaScript

๋ธŒ๋ผ์šฐ์ €์˜ ๋žœ๋”๋ง(async/defer)

Salangdung_i 2022. 3. 18. 10:00
728x90
๐Ÿ‘ฉ‍๐Ÿ’ป script ์‚ฌ์šฉ์‹œ ์–ด๋–ค ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ๋ณด์—ฌ์ง€๊ฒŒ ๋ ๊นŒ?

 

1. script๊ฐ€ header์— ์žˆ์„ ๊ฒฝ์šฐ

<head>
...
<script src="main.js"></script>
</head>
๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ํ•œ์ค„์”ฉ ์ฝ๋Š”๋‹ค.  script๋ฅผ ๋งŒ๋‚˜๋ฉด html ํŒŒ์‹ฑ์„ ๋ฉˆ์ถ”๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ๋Š”๋‹ค. [ feching.js | executing.js ] > ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค ์ฝ๊ณ ๋‚˜๋ฉด ๋‹ค์‹œ html์„ ํŒŒ์‹ฑํ•œ๋‹ค. > ํŽ˜์ด์ง€๋Š” ์ค€๋น„ ์™„๋ฃŒ๋œ๋‹ค. 

โ—๏ธ ๋‹จ์ :  jsํŒŒ์ผ์ด ํฌ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ๋ณด๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋œ๋‹ค.

 

2. script๊ฐ€ body์˜ ๋์— ์žˆ์„ ๊ฒฝ์šฐ

<body>
...
<script src="main.js"></script>
</body>
๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ์ „๋ถ€ parsingํ•œ๋‹ค. ์ดํ›„ ํŽ˜์ด์ง€๋Š” ์ค€๋น„ ์™„๋ฃŒ๋œ๋‹ค. ์ดํ›„ script๋ฅผ ์ฝ๋Š”๋‹ค.[feching.js|executing.js]
ํŽ˜์ด์ง€๊ฐ€ ์ค€๋น„๊ฐ€ ๋‹ค ๋œ ๋‹ค์Œ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋‚˜์„œ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” html pasing์ด ๋๋‚œ ์ƒํƒœ์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฒŒ ๋œ๋‹ค.

โ—๏ธ ๋‹จ์ : ์‚ฌ์šฉ์ž๊ฐ€ html์˜ ๊ธฐ๋ณธ์ ์ธ ์ฝ˜ํ…์ธ ๋Š” ๋น ๋ฅด๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์›น์‚ฌ์ดํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กด์ ์ด๋ผ๋ฉด... ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋ฏธ ์žˆ๋Š” ํ™”๋ฉด์„ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” [feching.js|executing.js]๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

 

3. head + async

<head>
...
<script asyn src="main.js"></script>
</head>
async ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด
๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ๋‹ค์šด๋ฐ›์•„ parsing์„ ํ•˜๋‹ค๊ฐ€ async ์˜ต์…˜์„ ๋งŒ๋‚˜๋ฉด ๋ณ‘๋ ฌ๋กœ main.jsํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์ž๊ณ  ๋ช…๋ นํ•ด๋†“๊ณ , main.js๊ฐ€ ๋‹ค์šด์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ๋•Œ html parsing์„ ๋ฉˆ์ถ”๊ณ  ๋‹ค์šด๋กœ๋“œ๋œ jsํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. js๋ฅผ ๋‹ค ์‹คํ–‰ ํ•œ ํ›„ ๋‚˜๋จธ์ง€ html์„ parsingํ•˜๊ฒŒ ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ๋˜๋ฉด body๋์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” fetchingํ•˜๋Š” ๊ฒƒ์ด ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ html์ด ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๊ธฐ๋„ ์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋–„๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ DOM์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, html์˜ ์š”์†Œ๊ฐ€ ์•„์ง ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š์„์ˆ˜ ์žˆ๋‹ค.

โ—๏ธ ๋‹จ์ : ์ •์˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅ ๋ชปํ•œ๋‹ค. 

 

4. head + defer

<head>
...
<script defer src="main.js"></script>
</head>
๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ๋‹ค์šด๋ฐ›์•„ parsing์„ ํ•˜๋‹ค๊ฐ€ defer ์˜ต์…˜์„ ๋งŒ๋‚˜๋ฉด ๋ณ‘๋ ฌ๋กœ main.jsํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์ž๊ณ  ๋ช…๋ นํ•ด๋†“๊ณ , ๋‚˜๋จธ์ง€ html์„ ๋๊นŒ์ง€ ํŒŒ์‹ฑํ•œ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ์ค€๋น„๋œ ์ƒํƒœ์—์„œ ๋‹ค์šด๋กœ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ defer ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •์˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰๋œ๋‹ค. 

 

์ฐธ๊ณ  : https://www.youtube.com/watch?v=tJieVCgGzhs 

"Icon made by Pixel perfect from www.flaticon.com"
728x90