- 웹문서 내부에서 스크립트 작성하기
- 스크립트는 html 문서 내부에서 작성해주거나, 또는 외부 스크립트 파일을 불러올 수도 있는데.. html 문서(예컨대, _js.html)의 </body> 바로 위 <script> .. </script> 내부에서 인라인 스크립트 코드로 작성해줄 수 있다
<body>
인라인 스크립트 작성하기
<script>
console.log("이스케이프 문자: \u03c0") // 이스케이프 문자: π
console.log("웃는 얼굴 이모지: \u{1F600}") // 웃는 얼굴 이모지: 😀
</script>
</body>
☞ 위 스크립트 코드를 실행한 결과는 [브라우저 개발자 화면]의 [콘솔] 탭에서 확인할 수 있습니다 ← 위 _js.html 파일을 실행한 뒤 마우스 우측버튼 단축메뉴의 <검사>를 클릭하면; [브라우저 개발자 화면]으로 들어가게 되고, 거기서 다시 [콘솔] 탭으로 찾아가면 됩니다..
* cf) 웹문서의 html 코드는 일반적으로 위에서 아래로 순서대로 로드되고 실행된다. 따라서, 적용하려는 html 및 Css 코드보다 스크립트가 먼저 불려지면 오류가 발생할 수 있다. 그런 이유로 스크립트 코드는 </body> 직전에 넣어주어야 한다!
<body>
..
<!-- 1. html 코드 내부에 넣는 스크립트 코드는
이벤트 리스너에서 'DOMContentLoaded' 속성을 사용해주어야 한다
-->
<script>
document.addEventListener("DOMContentLoaded", () => { // DOM이 다 로드된 이후.. ← 이는 defer와 같다!
// 스크립트 코드 실행
})
</script>
<!-- 2. </body> 바로 직전에 넣어준 스크립트 코드는
'DOMContentLoaded'를 사용하지 않아도 defer와 같은 방식으로 작동한다!
-->
<script>
const buttons= document.querySelectorAll("button")
for(const button of buttons) {
button.addEventListener("click", createParagraph);
}
</script>
</body>
☞ 이 경우, 모든 html 코드를 읽어온 이후 스크립트를 불러오게 되지만, 문제는 DOM을 모두 불러오기 전에는 스크립트의 로딩과 분석 또한 완전히 중단된다는 점이다!
- 외부 스크립트 파일 불러오기
-
js 스크립트 파일을 만들어(예컨대, _js.js) 그 안에서 스크립트 코드를 작성한 뒤,
_js.html 문서에서 <script>의
src속성으로 _js.js 파일을 불러온다 ← <script>의src속성은 URL 을 값으로 받기에 다른 웹서버에 있는 코드(예건대, 인터넷 광고 등..)도 가져올 수 있으며, 인라인 스크립트 코드에 비해 웹 페이지 분석 및 렌더링 속도도 더 빠르다!
// _js.js 파일
console.log("이스케이프 문자: \u03c0") // 이스케이프 문자: π
console.log("웃는 얼굴 이모지: \u{1F600}") // 웃는 얼굴 이모지: 😀
<body>
스크립트 파일 불러오기
<script src="_js.js"></script>
</body>
☞
외부에서 불러오는 <script>의 src 속성은 스크립트 코드를 html 문서에서
분리하여 단순화한다는 점 외에도, 단 한번만 불러오면 웹페이지 전체에서 이 코드를 공유할 수 있고,
따라서 서브 페이지들에서도 스크립트를 따로 불러오지 않고 브라우저 캐시에서 가져다 쓸 수 있다는
장점이 있다!
async와 defer는 모두 브라우저가 페이지의 다른 내용을 불러오는 동안
스크립트를 별도 쓰레드에서 불러오므로 스크립트를 가져오는 동안에도 페이지 로딩은 중단되지 않는다
- 단, 양자간에는 미묘한 차이점이 존재한다
←
HTML 명세서 스크립트 로딩 비교표 참조
<!-- 1. 외부 스크립트 파일 불러오기: 'defer' 속성 -->
<script src="js/default-js.js" defer></script>
☞
defer 스크립트는 순서를 유지한 채로 모든 컨텐츠를 다 불러온 이후에 실행된다.
따라서, 다른 스크립트에 의존하거나 DOM 로딩을 필요로 하는 경우에 사용된다
←
이는 </body> 바로 직전에 스크립트 코드를 넣어주는 경우와 같다!
<!-- 2. 외부 스크립트 파일 불러오기: 'async' 속성 -->
<script src="js/default-js.js" async></script>
☞
async 스크립트는 다운로드가 끝나는 즉시 '비동기적'으로 실행된다.
그 동안 현재 페이지의 문서 분석은 계속 해나가되, 페이지 렌더링은 일시적으로 중단된다
- 따라서, 스크립트를 즉시 실행해야 하고 종속성이 없는 경우에 적합하다!