자바스크립트
- 가벼운 스크립트 언어
인터프리터
를 이용해 런타임
시 코드를 한줄 한줄 번역해서 실행하는 언어이다.
- 일급함수를 가진 프로그래밍 언어이다.
- 웹페이지, Node.js(브라우저 외부환경) 뿐 아니라
자바스크립트 엔진
이 있는 어떤 곳에서도 자바스크립트 언어 사용 가능하다.
- Prototype-based 로 해서 멀티 패러다임이 가능하고
- 싱글 스레드 환경
- 동적언어
JS V8엔진?
- V8은 웹 브라우저를 만드는데 기반을 제공하는 구글에서 개발한 오픈소스 자바스크립트 엔진이다.
- V8은 자바스크립트 코드를 실행 전에 최적화된 머신 코드로 컴파일하는 엔진이다.
- 즉, V8은 자바스크립트 코드를 받아 컴파일하고 실행하는 C++ 프로그램이다.
- 크롬 브라우저와 노드 js에서 사용된다.
V8은 왜 생겨났는가?
- 웹 브라우저 내부에서 자바스크립트의 속도 개선을 위해서 고안되었다.
= 자바스크립트 엔진은 웹 특성상 유저와 상호작용을 위해서 즉시성이 있는 인터프리터 방식을 사용하는데, 코드가 많아질 수록 속도가 느려져서 구글맵같은 기능을 구현하기 어려웠다.
- 따라서 V8은 속도 향상을 위해 자바스크립트 코드를 더 효율적인 머신 코드로 번역한다.
* 컴퓨터는 0, 1만 이해 할 수 있기 때문에 작성한 소스코드를 머신 코드로 변환 해줘야 한다. 변화 과정이 컴파일
, 인터프리터
를 통해 일어난다.
컴파일러 와 인터프린터의 차이?
Compiler
- 소스코드 → 컴파일러 → 기계어로 변환 → 결과 (변환 과정을 통해 코드를 한번에 변환)
- 컴파일러는 실행하기전 모든 코드를 번역하는 작업을 거쳐야 함
보통 컴파일링 하는 프로그램 언어는 사전에 컴파일링 과정을 거쳐서 실행파일을 만들기 때문에 처음 실행하기 전 컴파일링 과정에서 오래걸린다는 단점이 있지만
실행파일을 만들어놓고 실행할때는 빠르게 실행할 수 있어서 실행 속도가 빠른 장점이 있음
Interpreter
- 소스코드 → 인터프리터 → 결과 (실행 할 때 마다 한줄씩 번역)
- 인터프린터는 실행을 해놓고 하나씩 필요할 때마다 한줄 한줄 번역해서 실행하는것이다.
바로 실행 하기 때문에 초반에 실행하는 속도는 빠르지만 실행하는 당시 한줄 한줄씩 번역해야하기 때문에 실행 속도가 비교적 느릴 수 있다는 단점이 있음.
- 최초 엔진은 인터프리터 였지만 최신 엔진은 성능향상을 위해
Just-In-Time 컴파일
을 사용한다.
JIT Compiliation (Just In Time)
- 초기 JS 엔진은 Interpreter 였지만 현재는 JIT compiliation 을 이용하고 있다. 인터프린터는 한줄씩 실행되기 때문에 매우 느리다. 웹 지도 같은 경우 Heavy한 기능들도 수행하고 있기에 더 나은 퍼포먼스를 위해 JIT 컴파일을 이용하고 있다.
✔️ 자바스크립트 코드를 실행하기 위해선 자바스크립트 엔진이 필요하다.
✔️ 자바스크립트 코드를 한줄 한줄 번역해서 실행해 줄 엔진이 중요하다.
✔️ 자바스크립트 언어를 실행하기 위해서는 자바스크립트 엔진이 필요하고 각각의 브라우저
마다 다른 엔진을 가지고 있다.
각각의 엔진?
익스플로러 - Chakra / 엣지 브라우저 - V8
크롭 - V8
사파리 - JavaScript Core
파이어폭스 - SpiderMonkey
ECMAScript
- 브라우저 엔진들이 JS 를 이해하고 번역하고 실행하기 위해서는 공통된 규격이 필요한데 규격을 정의한 곳이 ECMAScript 이다.
- ECMAScript 는 자바스크립트의 문법을 규격화한 문법의 표준사항을 명시 하고 있다.
- 엔진은 ECMAScript라는 자바스크립트 문법에 표준사항을 규격하는 표준문을 통해 각각의 엔진들이 구현되어있다.