node.js에는 자바스크립트 엔진이 있어서 브라우저 없이도 터미널에서 바로 자바스크립트를 실행할 수 있다.
API? Application Programming Interface
웹 API는 자바스크립트 언어 자체에 포함된 언어가 아니라, 브라우저에 제공되는, 브라우저가 이해할 수 있는 함수들이다. 콘솔 API는 웹 API 종류 중의 하나이다. MDN > Console API 참조
우리가 node.js 터미널과 웹 브라우저의 터미널(F12) 모두에서 콘솔 API(console.log) 함수를 쓸 수 있는 것은, node.js와 웹 API 모두 콘솔 API를 가지고 있기 때문이다. (콘솔 API는 통상적으로 많이 쓰이기 때문에)
head + async
html이 파싱되다가 script async를 만나면 html 파싱과 동시에 (병행하여) js 파일을 다운로드한다. js 파일 다운이 완료되면 js 파일을 실행시킨 후 남은 html 파일을 파싱한다.
장점: 다운 시간 절약
단점: 자바스크립트 파일이 html이 모두 파싱되기도 전에 (병행하여) 실행되기 때문에 만약 자바스크립트 파일에서 예를 들어 querySelector를 사용해서 요소를 조작해야 한다면 조작하려고 하는 시점에 html에 우리가 원하는 요소가 아직 정의되어 있지 않을 수도 있다.
html이 파싱되다가 js파일 실행을 위해 잠깐 멈춰질 수도 있기 때문에 사용자가 페이지를 보는데 시간이 조금 더 걸린다.
여러개의 js파일을 가져올 경우, 정의된 스크립트의 순서와 상관없이 다운로드가 먼저 된 아이를 실행한다.
defer이 가장 좋은 옵션!
사용자에게 파싱을 먼저 보여주고 js를 실행하기 때문
html 파싱 동안 필요한 여러 js파일을 한꺼번에 다운받아놓고, 나중에 순서대로 실행한다.(스크립트가 순서대로 실행된다.)