728x90
Javascript를 실행시키기 위해 Javascript엔진이 필요하고, 웹 브라우저는 엔진을 내장하고 있다.
코드 실행 방식이 각기 다르지만 방식은 비슷하다.
JS엔진이 코드를 실행하는 과정
- 소스코드를 만나면 파서를 이용해 파싱을 한 뒤, AST(Abstract Syntax Tree: 추상 구문트리)로 변환한다.
- AST는 프로그래밍 언어로 작성된 소스코드의 추상 구조의 트리이다.
- 추상적이라는 의미는 실제 구문에서 나타나는 모든 세세한 정보를 나타내지 않는 다는 것을 의미한다.
- 참고 : 링크
- Interpreter는 AST 기반으로 ByteCode를 생성한다.
- 인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 의미한다.
- 원시코드를 기계어로 변환하는 컴파일러와는 대비되는 정의를 갖는다.
- Interpreter가 ByteCode를 실행할 때 자주 사용되는 함수 및 타입 정보들이 있는 프로파일링 데이터와
같이 최적화 컴퍼일러(Optimizing Compiler)에게 보내진다.- 인터프리터는 고급언어들을 중간 형태로 번역한 다음 그것을 실행시킨다.
- 고급언어로 작성된 프로그램을 실행하는 방법 중 인터프리터를 사용하지 않고,
프로그램을 컴파일하는 방법은 인터프리터를 사용했을 때 보다 빠르게 실행이 가능하지만,
인터프리터를 사용하면 기계어 명령어들이 만들어지는 컴파일 과정을 거칠 필요가 없다는 장점을 갖는다. - 최적화 컴파일러에서 바이트 코드를 기계어로 변환해준다.
- 최적화 컴파일러는 프로파일링 데이터를 기반으로 최적화 코드(Optimized Code)를 생성한다.
- 하지만, 프로파일링 데이터 중 잘못된 부분이 있다면 최적화 해체(Deoptimize)를 한뒤,
바이트 코드를 실행 시켜 이전 동작을 반복해준다.
Javascript는 기본적으로 인터프리터 언어이다.
이렇게 만들어진 기계어는 CPU에서 코드를 실행시켜준다.
참고로 자바스크립트 엔진의 종류를 찾아 봤다.
V8 : Google Chrome, Node.js, Electron 등에서 사용
Javascript Core : Apple Safari 등에서 사용
SpiderMonkey : Mozilla Firefox 등에서 사용 (최초의 JS엔진)
Chakra : Microsoft Edge 등에서 사용
728x90
'FE 이모저모 공부' 카테고리의 다른 글
모듈 시스템 : CommonJS, AMD, UMD, ES6 (0) | 2023.08.26 |
---|---|
BOM(Browser Object Model)과 DOM(Document Object Model) (0) | 2023.08.17 |
브라우저의 렌더링 원리 + Virtual DOM의 등장 (0) | 2023.08.15 |
CSR(Client Side Rendering)과 SSR(Server Side Rendering) (0) | 2023.08.07 |
body-parser를 알아보자 (0) | 2022.11.08 |