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 |