๐Ÿ“ŒDevelopment/JavaScript

[JS] ์ฝ˜์†”์— ์ถœ๋ ฅ, script async ์™€ defer์˜ ์ฐจ์ด์ 

geumsong 2023. 3. 12. 15:24

<์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ™”๋ฉด์— Hello World์ถœ๋ ฅํ•˜๊ธฐ>

-  VSC ์‹คํ–‰
-  console.log('Hello World!');     ์ž…๋ ฅ
-  ํŒŒ์ผ์ด๋ฆ„: "  main.js  "



- ํ•ด๋‹น ํด๋” ์šฐํด๋ฆญ -> Git Bash here -> node main.js ์น˜๋ฉด Hello World! ๋ผ๊ณ  ๋œฌ๋‹ค.

 

*  IDE(Integrated Development Environment)
:  ํšจ์œจ์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ ์†Œํ”„ํŠธ์›จ์–ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
:  ํ•œ๋งˆ๋””๋กœ ๊ฐœ๋ฐœ๋„๊ตฌ(ex. VSC)

*  console API
:  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜. 

[  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต์‹์‚ฌ์ดํŠธ  ]
developer.mozilla.org (์ถ”์ฒœ)

 

console.log()

-  console.log() ๋ฉ”์„œ๋“œ๋Š” "์›น ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค." ๋ฅผ ์˜๋ฏธ.

-  ์ฝ˜์†” ์‹คํ–‰ ์ฐฝ :  ctrl + shift + I

 

์ด๋Ÿฐ ์‹์œผ๋กœ alert API๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

-  ๊ทธ๋ƒฅ hello ๋ผ๊ณ  ์ณค์„ ๋•Œ, hello๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค. ๋”ฐ๋ผ์„œ set/var ์„ ์‚ฌ์šฉํ•ด hello๋ฅผ ์ •์˜ํ•˜๊ณ  (set hello;) hello = 10; ์ด๋ผ๊ณ  ํ• ๋‹น(๋ฐฐ์ •)ํ•œ ํ›„ ๊ทธ ๋‹ค์Œ์— hello; ๋งŒ ์ ์–ด๋„  10 ์ด๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.



< async VS defer >

-  head ์•ˆ์— script๊ฐ€ ํฌํ•จ๋  ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์ผ๊นŒ?

parsing HTML :   HTML ํŒŒ์ผ ๋‹ค์šด
fetching js :   js ํŒŒ์ผ ๋‹ค์šด
executing js :   js ํŒŒ์ผ ์‹คํ–‰

 

โ–ผ
โ–ผ

 

01.  parsing HTML โ–ถ blocked(fetching js → executing js) โ–ถ parsing HTML

<head> ์•ˆ์— <script> ํฌํ•จ

parsing HTML blocked parsing HTML
  fetching js executing js  

1.parsing HTML
: ์‚ฌ์šฉ์ž๊ฐ€ HTMLํŒŒ์ผ ๋‹ค์šด -> ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ ์ค„์”ฉ ๋ถ„์„(CSS์š”์†Œ์™€ ๊ฒฐํ•ฉ)

โ–ผ


2. blocked
: scriptํƒœ๊ทธ ๋ฐœ๊ฒฌ์‹œ ๋ถ„์„์„ ์ž ์‹œ ๋ฉˆ์ถค. -> ํ•„์š”ํ•œ JSํŒŒ์ผ์„ ์„œ๋ฒ„์—์„œ ๋‹ค์šด(fetching js) ๋ฐ›์•„ ์‹คํ–‰(executing js)

โ–ผ


3.parsing HTML
: ๋‹ค์‹œ ๋ถ„์„


===> ๋‹จ์ : ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ ์šฉ๋Ÿ‰ ์ปค์ง€๊ณ  ์ธํ„ฐ๋„ท ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Œ. ๋”ฐ๋ผ์„œ <head>์— <script>๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฑด X.

 

02.  parsing HTML  โ–ถ  fetching js  โ–ถ  executing js

<body>์˜ ์ œ์ผ ๋๋ถ€๋ถ„์— <script> ๋„ฃ๊ธฐ.

parsing HTML fetching js excuting js



===> ๋‹จ์ :  ์›น์‚ฌ์ดํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กด์ ์ด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ƒ์ ์ธ ํŽ˜์ด์ง€ ๋ณด๊ธฐ ์ „๊นŒ์ง€ fetching ์‹œ๊ฐ„, executing์‹œ๊ฐ„๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•จ.




03.   parsing HTML โ–ถ main.jsํŒŒ์ผ ์‹คํ–‰  ๋ช…๋ น โ–ถ parsing โ–ถ executing js(blocked)  โ–ถ parsing HTML head + async

head ์•ˆ์— <script>์ด์šฉํ•˜๋˜ asyn ์†์„ฑ ์ด์šฉํ•˜๊ธฐ
:  asyn : ๋ถˆ๋ฆฌ์–ธํƒ€์ž… ์†์„ฑ
:  ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ true๋กœ ์„ค์ •๋จ.

parsing HTML blocked parsing HTML
fetching js executing js  

-HTML ํŒŒ์ผ ๋‹ค์šด  asyc ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ณ‘๋ ฌ๋กœ main.jsํŒŒ์ผ ๋‹ค์šด     ๋‹ค์‹œ parsing  → main.js๊ฐ€ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ๋•Œ parsing๋ฉˆ์ถ”๊ณ  ๋‹ค์šด๋กœ๋“œ๋œ main.jsํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒŒ๋จ.


===> ์žฅ์ :  <body> ๋์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค fetching ์ด parsingํ•˜๋Š”๋™์•ˆ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ธฐ๋•Œ๋ฌธ์— ๋‹ค์šด ์‹œ๊ฐ„ ์ ˆ์•ฝ ๊ฐ€๋Šฅ

===> ๋‹จ์ :   parsing ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— jsํŒŒ์ผ์—์„œ ์กฐ์ž‘ํ•˜๋ ค๋Š” ์‹œ์ ์— HTML์—์„œ ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์•„์ง ์ •์˜X ์ˆ˜ ์žˆ์Œ
===> HTML์ด parsing๋˜๋Š” ๋™์•ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ•˜๊ธฐ์œ„ํ•ด ๋ฉˆ์ถœ์ˆ˜๋„์žˆ์Œ. ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
===> 
<script async src="a.js"></script>
<script async src="b.js"></script>
<script async src="c.js"></script>

-jsํŒŒ์ผ์ด 3๊ฐœ๋ผ๋ฉด, ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ๋‹ค์šด๋กœ๋“œ ๋จผ์ € ๋œ ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด asyc์ด์šฉ ์‹œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.




04.   HTML parsing โ–ถ <script defer> ๋ฐœ๊ฒฌ, ๋‹ค์šด ๋ช…๋ น โ–ถ ๋‚˜๋จธ์ง€ HTML parsing โ–ถ executing js(jsํŒŒ์ผ ์‹คํ–‰)

head + defer


- head ์•ˆ์— script ์“ฐ๊ณ  defer์˜ต์…˜ ๋„ฃ๊ธฐ
- HTML parsing์„ ๋จผ์ € ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ ์ค€ ํ›„ js๋ฅผ ์‹คํ–‰.



===> ์žฅ์ :
<script defer src="a.js"></script>
<script defer src="b.js"></script>
<script defer src="c.js"></script>

-  jsํŒŒ์ผ์ด 3๊ฐœ๋ผ๋ฉด, parsingํ•˜๋Š” ๋™์•ˆ js๋ฅผ ๋ฐ›์•„๋†“์€ ๋‹ค์Œ, ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š”๋Œ€๋กœ script ์‹คํ–‰๋œ๋‹ค.
   ๋”ฐ๋ผ์„œ defer์„ ์“ฐ๋Š” ๊ฒƒ์ด ํšจ์œจ์ , ์•ˆ์ •์ !!






์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด์šฉ์‹œ,

 

์ œ์ผ ์œ—๋ถ€๋ถ„์— 


'use strict';

์ •์˜ํ•˜๋ฉด ์ข‹์Œ. type script ์“ธ๋• ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ์ˆœ์ˆ˜ Valina ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด์šฉํ•  ๋• ์จ์•ผํ•œ๋‹ค.

-์ด์œ : Brenden ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ๋งŒ๋“ค ๋•Œ ๋นจ๋ฆฌ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์—ฐํ•œ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์œ ์—ฐํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋•Œ๋ก  ์•„์ฃผ ์œ„ํ—˜ํ•œ ๊ฒƒ. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ์€ ์‹ค์ˆ˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค๋˜์ง€ ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•œ๋‹ค๋˜์ง€ ์ด๋Ÿฐ ๋น„์ƒ์‹์ ์ธ ๊ฒƒ๋“ค์€ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ดค์„ ๋•Œ ๋ฏธ์นœ๋“ฏํ•œ ํ–‰๋™๋“ค์ž„. ๋‹คํ–‰ํžˆ use strict๋Š” ECMAScript์— ์ถ”๊ฐ€๋ผ์žˆ์Œ. ์ด๊ฑธ ์“ฐ๋ฉด ๋” ์ด์ƒ ๋น„์ƒ์‹์ ์ธ ๊ฒƒ๋“ค์„ ์“ธ ์ˆ˜ ์—†๊ฒŒ๋จ.


์˜ˆ์‹œ:
1. use strict ์‚ฌ์šฉX

console.log('Hello Wolrd');
a=6


===>๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ฌธ์ œ X.

 


2. use strict ์‚ฌ์šฉO

'use strict';
console.log('Hello Wolrd');
a=6



===>console์—์„œ ์—๋Ÿฌ๋ฐœ์ƒ(a๋Š” ์ •๋ฆฌ๋ผ์žˆ์ง€ ์•Š๋‹ค). ๋”ฐ๋ผ์„œ

 

 

'use strict';
console.log('Hello Wolrd');
let a;
a=6
===>let a; ๋ผ๊ณ  ์„ ์–ธํ•˜๋ฉด ๋ฌธ์ œ์—†๋‹ค.




ํŒŒ์ผ ์ œ์ผ ์œ„์— use strcit์‚ฌ์šฉํ•ด์„œ strcit๋ชจ๋“œ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค. ํšจ์œจ์ , ๋” ๋น ๋ฅธ ๋ถ„์„ ๊ฐ€๋Šฅ.