JS V8 Engine

효딩딩·2022년 8월 24일
0

자바스크립트

  • 가벼운 스크립트 언어
  • 인터프리터를 이용해 런타임 시 코드를 한줄 한줄 번역해서 실행하는 언어이다.
  • 일급함수를 가진 프로그래밍 언어이다.
  • 웹페이지, 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라는 자바스크립트 문법에 표준사항을 규격하는 표준문을 통해 각각의 엔진들이 구현되어있다.
profile
어제보다 나은 나의 코딩지식

0개의 댓글