script์ html
์๋ ์์์ ํจ๊ป script ํ์ผ์ ํจ๊ณผ์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ฒซ๋ฒ์งธ ์์
- head ํ๊ทธ ์์ ์ฝ์
<!DOCTYPE html>
<html lang="en">
<head>
<script src="script.js"></script>
</head>
<body>
<button id="btn">๋ฒํผ</button>
</body>
</html>
โก๏ธ html ํ์ฑ์ ์์ฐจ์ ์ผ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ DOM์ด ์์ฑ๋๊ธฐ ์ ์ script๊ฐ ์คํ๋์ด #btn์ ๋ถ๋ฌ์ฌ ์ ์์ด null์ด ๋ฐ์ํฉ๋๋ค.
๋๋ฒ์งธ ์์
- body ํ๊ทธ์ ๋ง์ง๋ง์ ์ฝ์
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<button id="btn">๋ฒํผ</button>
<script src="script.js"></script>
</body>
</html>
let btn = document.querySelector('#btn');
console.log('btn : ', btn);
// <button id="btn">๋ฒํผ</button>
์ธ๋ฒ์งธ ์์
window.onload
ํจ์- HTMLํ์ฑ, DOM์์ฑ ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์ฝํ ์ธ (images, script, css, etc)๊ฐ ๋ก๋๋ ํ ๋ฐ์ํ๋ ์ด๋ฒคํธ
<!DOCTYPE html>
<html lang="en">
<head>
<script>
window.onload = function () {
let btn = document.querySelector('#btn');
btn.addEventListener('click', function () {
alert('Hello World');
});
};
</script>
</head>
<body>
<button id="btn">๋ฒํผ</button>
</body>
</html>
โก๏ธ DOM์ด ๋ค ์์ฑ๋ ํ ํจ์๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ์ ๋๋ก ์๋ํฉ๋๋ค!
ํ์ง๋ง onload
ํจ์๋ ์ธ๋ถ ์ฝํ
์ธ ๊น์ง ๋ก๋๋ ํ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง๊ฐ ์ ๋ง์ฅ(?) ๋ถ๋ฌ์์ผ ํ ๊ฒฝ์ฐ์๋ ํจ์จ์ ์ด์ง ๋ชปํฉ๋๋ค.
์ด๋ฐ ์ํฉ์ ์ธ ์ ์๋ ํจ์๋ DOMContentLoaded
์
๋๋ค.
DOMContentLoaded
ํจ์- HTMLํ์ฑ DOM์์ฑ ํ ๋ฐ์ํ๋ ์ด๋ฒคํธ
<!DOCTYPE html>
<html lang="en">
<head>
<script>
document.addEventListener('DOMContentLoaded', function() {
let btn = document.querySelector('#btn');
btn.addEventListener('click', function() {
alert('Hello World');
});
});
</script>
</head>
<body>
<button id="btn">๋ฒํผ</button>
</body>
</html>
โก๏ธ window.onload
์ DOMContentLoaded
์คํ ์์๋ฅผ ๋น๊ตํด๋ณด๋ฉด
DOMContentLoaded โ window.onload ์์ผ๋ก ๋ฐ์ํฉ๋๋ค.
๋ค๋ฒ์งธ ์์
- defer, async
๐ฅ์ฌ๊ธฐ์ ์ ๊น!
script ํ๊ทธ๋ฅผ head ํ๊ทธ ์์๋ค๊ฐ ์์ฑํ ๊ฒฝ์ฐ, HTML parsing์ ํ๋ค๊ฐ script ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ์ ์ ๋ฉ์ถ๊ณ script๋ฅผ ๋ถ๋ฌ์ค๊ณ (fetch), ์คํ(execution)ํ ๋ค์ ๋ค์ HTML parsing์ด ์งํ๋ฉ๋๋ค. (๋๊ธฐ ๋ฐฉ์)
๊ทธ๋์ DOM์ด ์ ๋๋ก ๋ถ๋ฌ์์ง์ง ์์ ์ํ์์ script๊ฐ ์คํ๋์ด ์ค๋ฅ๊ฐ ๋ฌ์๋ ๊ฒ๋๋ค~
body ํ๊ทธ ์ตํ๋จ์ ์์ฑํ๋ฉด HTML parsing์ด ๋ชจ๋ ์๋ฃ๋ ํ์ script๋ฅผ ๋ถ๋ฌ์ค๊ณ ์คํํ๊ธฐ ๋๋ฌธ์ DOM ์์๋ฅผ ๋ชป ์ฐพ๋ ๋ถ์์ฌ๋ฅผ ํผํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ข ๋ ํจ์จ์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํ๋ ๊ฒ์ด ์ข์๊น์?
HTML parsing์ ํ ๋ ๊ฐ์ด script๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์๋ฃ๋ ํ ์คํํ๋ ๊ฒ์ด ์ข๊ฒ ์ฃ ?
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด html5์์ defer
์ async
๊ฐ ์๊ฒจ๋ฌ์ต๋๋ค.
- defer
- HTMLํ์ฑ๊ณผ ํจ๊ป ๋น๋๊ธฐ๋ก JavaScript ํ์ผ ๋ก๋
- HTML ํ์ฑ์ด ์๋ฃ๋ ํ, JavaScript ์ฝ๋๋ฅผ ์คํ
- HTMLํ์ฑ๊ณผ ํจ๊ป ๋น๋๊ธฐ๋ก JavaScript ํ์ผ ๋ก๋
<!DOCTYPE html>
<html lang="en">
<head>
<script src="script.js" defer></script>
</head>
<body>
<button id="btn">๋ฒํผ</button>
</body>
</html>
- async
- HTMLํ์ฑ๊ณผ ํจ๊ป ๋น๋๊ธฐ๋ก JavaScript ํ์ผ ๋ก๋
- HTMLํ์ฑ์ด ์๋ฃ๋์ง ์์๋๋ผ๋, ๋จผ์ ๋ก๋ฉ๋๋ JavaScriptํ์ผ๋ถํฐ ์คํ ์์
- JavaScript ํ์ผ์ ์คํํ ๋๋ HTML ํ์ฑ ์ค๋จ
- HTMLํ์ฑ๊ณผ ํจ๊ป ๋น๋๊ธฐ๋ก JavaScript ํ์ผ ๋ก๋
<!DOCTYPE html>
<html lang="en">
<head>
<script src="script.js" async></script>
</head>
<body>
<button id="btn">๋ฒํผ</button>
</body>
</html>
โก๏ธ defer
, async
๋ parsing ๋์ค์ script๋ฅผ ๋ง๋๋ ๋ฉ์ถ์ง ์๊ณ ๋์์ ์งํ๋ฉ๋๋ค.
(์ด๊ฒ์ด ๋น๋๊ธฐ ํต์ฌ!)
๐ฅํ์ง๋ง!
defer
๋ ๋์์ ์งํํ๊ณ script๋ฅผ parsing๋ณด๋ค ๋จผ์ ์๋ฃ๋๋๋ผ๋ ๊ธฐ๋ค๋ ธ๋ค๊ฐ script๊ฐ ์คํ๋๋ ๋ฐ๋ฉด async
๋ script fetch๊ฐ ์๋ฃ๋๋๋๋ก ๋ฐ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ํ์ด๋ฐ์ด ์๋ง์ ์ ์์ต๋๋ค.
๊ทธ๋ผ defer๋ง ์ฐ๋ฉด ๋์ง async๋ ์ด๋ ๋์ ํ์ํ ๊น์?
๊ฐ๋จํ ์๊ฐํด๋ณด๋ฉด DOM๊ณผ ์ํธ์์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ parsing์ด ์๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ๋นํจ์จ ์ ์ผ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฐ์ ์์๋ ์๋์ ๊ฐ์ต๋๋ค~
๋ ๋ฆฝ์ ์ธ ์คํฌ๋ฆฝํธ ๋ก๋
์คํฌ๋ฆฝํธ๊ฐ DOM ๊ตฌ์กฐ์ ์์กดํ์ง ์๋ ๊ฒฝ์ฐ
์) ๋ฐ์ดํฐ ๋ถ์ ํด, ๊ด๊ณ ์คํฌ๋ฆฝํธ, ์์ ๋ฏธ๋์ด ์์ ฏ ๋ฑ
<script async src="https://www.google-analytics.com/analytics.js"></script>
๋คํธ์ํฌ ๋ณ๋ ฌ ๋ก๋
- ์ฌ๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ ์ต์ ํ
- ์) ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ก๋ ์๋ ์ต์ ํ
- DOM์ด ํ์ํ์ง ์์ ์์
- ์) ์ด๋ฒคํธ ์ถ์ , ์ด๊ธฐํ ๋ฑ
'๐จ Frontend > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript/HTML - DOM์ด๋? (0) | 2025.01.08 |
---|---|
๐ฆVanilla JS (12) ES5, ES6 (0) | 2023.04.08 |
๐ฆVanilla JS (11) HTTP ๋น๋๊ธฐ ํต์ (2) | 2023.04.08 |
๐ฆVanilla JS (10) JSON (0) | 2023.04.05 |
๐ฆVanilla JS (9) ์ ๊ท ํํ์ (0) | 2023.04.05 |