๋ณธ ๊ธ์ ํ ์คํธ ๋ฌธ์ ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๊ธฐ(Synchronous)์ ์ผ๋ก (HTML + CSS), Javascript ์ธ์ด๋ฅผ ํด์ํ์ฌ ๋ด์ฉ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ์์ฉ ์ํํธ์จ์ด์ ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์ฃผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์๋ฒ์ ์์ฒญํ๊ณ ๋ธ๋ผ์ฐ์ ์ ํ์ํ๋๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ์ํ๋ ์ ๋ณด์ ์ข ๋ฅ๋ ํฌ๊ฒ Html , img, pdf ๋ฑ์ ๋๋ค. ์ฌ๊ธฐ์ ์ ๋ณด์ ์ข ๋ฅ ํนํ๋ Html์ ๊ตฌ๋ถํ๋ ๊ฒ์ ์ฃผ์๋ผ๊ณ ํ๋ฉฐ, ์ด๋ Url(Uniform Resource Locator) ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์ข ๋ฅ์๋ ํฌ๋กฌ, ์ฌํ๋ฆฌ, ํ์ด์ดํญ์ค (์คํ์์ค ๊ธฐ๋ฐ) , ๋ค์ด๋ฒ ์จ์ผ ๋ฑ๋ฑ ๋ค์ํ ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์กด์ฌํฉ๋๋ค.
์ต๊ทผ ์ ์ ๋ค์ ๋ธ๋ผ์ฐ์ ์ ์ ์จ ์ ๋๋ค. ํฌ๋กฌ๊ณผ ์ฌํ๋ฆฌ๊ฐ ๋๋ถ๋ถ์ ์ฐจ์งํ๋๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ์ค์ฌ์ด ๋๋ ์์๋ค์ ์ค์ฌ์ผ๋ก ์์ฑํ๊ฒ ์ต๋๋ค.
์ฃผ์ ํ์์ค , ์ด์ ์์ผ๋ก ๊ฐ๊ธฐ ๋ฒํผ, ์ฆ๊ฒจ์ฐพ๊ธฐ, ์ค์ , ์ฐฝ ๋๊ธฐ, ํ , ๋ฑ๋ฑ ํ์ด์ง ์ ๋ณด๋ฅผ ํ์ํ๋ ์ฐฝ์ ์ ์ธํ ๋ชจ๋ ๋ถ๋ถ์ ๋๋ค. ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ๋ค์ ์๋ก ๊ฒฝ์๊ณผ ๋ฐ์ ์ ํตํด์ ์ด๋ ์ ๋ ์ ์ฌํ ๋์์ธ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
User Interface์ Rendering Engine ์ฌ์ด์ ๋์์ ์ ์ดํด์ฃผ๋ ์์ง์ ๋๋ค.
์น์์ ๋ ๋๋ง ์์ง์ ์ญํ ์ ์์ฒญ ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ Render ์ํค๋ ์ญํ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํฌ๋กฌ, ์ฌํ๋ฆฌ๋ฑ์ webkit ์์ง์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ค์์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด Render ์ํค๋ ๋์ ์์๋ฅผ ๊ฐ๋ตํ ํํํ ๊ฒ์ด๋ค. ๋ ๋๋ง ์์ง์ ์๋ฒ๋ก ๋ถํฐ ์ ๋ฌ๋ฐญ์ Html๋ฌธ์๋ฅผ ํ์ฑํ๊ณ DOM(Document Object Model) tree๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ css ์์๋ฅผ ์ ์ฉ์ํค๊ธฐ ์ํด ๋ง์ฐฌ๊ฐ์ง๋ก CSSOM(Cascading Style Sheets Object Model)tree ๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋งค์นญ ์์ผ Render tree๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ ํ ํ๋ฉด์ Render tree๋ฅผ ํตํด ๊ตฌ์ฑํ ์์๋ค์ด ํ๋ฉด์ ์ ํํ ๋ฐฐ์น ๋ ์์น๋ฅผ ์ ํ๊ณ , ์ ํด์ง ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ render ํฉ๋๋ค. ์ฌ๊ธฐ์ Render tree์๋ ํ๋ฉด์ ์ง์ ์ ์ผ๋ก ํ์๊ฐ ๋ ์์๋ค๋ง์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ css ์์ฑ์ผ๋ก visibility : hidden;์ธ ์์๋ ๊ด์ฐฎ์ง๋ง display: none ์ Render tree์์ ์ ์ธ๋ฉ๋๋ค.
Html ๋ฌธ์๋ฅผ ํ์ฑํ๋์ค
<script></script>
ํ๊ทธ๋ฅผ ๋ง๋๊ฒ ๋๋ค๋ฉด Html ๋ฌธ์์ ํ์ฑ์ ์ค๋จํ๊ณ js ํ์ผ์ ๋ก๋ํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ html๋ฌธ์๋ฅผ ํ์ฑํ๋ ๊ณผ์ ์ ์์ด์ 2๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๊ฐ์ ์ํฉ์ ํผํ๊ธฐ ์ํด script ํ๊ทธ๋ bodyํ๊ทธ์ ์ตํ๋จ์ ์์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํน์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก js ํ์ผ์ ๋ก๋ํ๋๊ฒ์ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>script load</title>
</head>
<body>
<script>
// window.onload๊ฐ ๊ฐ์ฅ ์์ ์์น!
window.onload = function () {
console.log("afterwindowload");
var target = document.querySelector("#test");
console.log(target);
};
// DOMContentLoaded๊ฐ ๋๋ฒ์งธ์ ์์น!
document.addEventListener("DOMContentLoaded", function () {
console.log("afterdomload");
var target = document.querySelector("#test");
console.log(target);
});
// ์ผ๋ฐ script ์ฝ๋๊ฐ ๊ฐ์ฅ ๋์ ์์น
console.log("๋ฐ๋ก์์");
var target = document.querySelector("#test");
console.log(target);
</script>
<div id="test">test</div>
</body>
</html>
์์ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ script ํ๊ทธ๊ฐ body ํ๊ทธ์ ์์๋ถ๋ถ์ ์กด์ฌํฉ๋๋ค. ํ์ง๋ง onloadํจ์ , "DOMContentLoaded"๋ฅผ ํตํด์ script ํ๊ทธ๋ฅผ ๋ง๋๋๋ผ๋ js ํ์ผ์ load๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
์์ ๊ฐ์ด script์ ํ๋จ์ console.log์ ์ถ๋ ฅ์ ๋ณด๋ฉด null๋ก ๋์ค๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๋ ๋ฐฉ๋ฒ์ ํตํด์ html ํ์ฑ์ด ๋๋ ํ ์์์ ์ ๊ทผ ํ๊ธฐ ๋๋ฌธ์ querySelector๋ฅผ ํตํด์ ์ ๊ทผํ div ํ๊ทธ๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
HTML ๋ฌธ์์ ํ์ฑ์ด ์ ์์ ์ผ๋ก ๋ง๋ฌด๋ฆฌ ๋์๋ค๋ฉด, ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ ๋๋ง ์์ง์ DOM tree๋ฅผ ์์ฑํฉ๋๋ค.
๊ตฌ์ถ๋ Render tree๋ฅผ ํ๋ฉด์ ๋ฐฐ์น๋ ์์น๋ฅผ ์ ํฉ๋๋ค.(Layout)
์ ํด์ง ์์น์ ๋ฐ๋ผ์ Render tree๋ฅผ ๊ทธ๋ฆฝ๋๋ค.(painting)
์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ํด์ํ๊ณ ์คํ์ํต๋๋ค. ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ํฌ๋กฌ์์ ์ฌ์ฉํ๋ v8 ์์ง์ด ์์ต๋๋ค.