Web/javascript

chrome V8 엔진에 대해

rockettttman 2024. 3. 14. 17:21

 

V8은 C++ 작성된 Google의 웹 브라우저를 만드는 데 기반을 제공하는 오픈 소스 자바스크립트 또는 웹 어셈블리(WebAssembly) 엔진이다. 구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있고 Node.js 등에서 사용된다. ECMAScript(ECMA - 262) 3rd Edition 규격의 C++로 작성되었으며, 독립적으로 실행이 가능하다. 또한 C++로 작성된 응용 프로그램의 일부로 작동할 수 있다.

 

V8은 컴퓨터가 실제로 이해할 수 있도록 JavaScript 코드를 기계어(CPU가 이해할 수 있는 언어로 숫자로만 구성된 순수 디지털 방식)로 직접 번역한 다음, 번역된 코드, 즉 컴파일된 코드를 실행한다.

 

WebAssembly

WebAssembly 최신 브라우저에서 실행할 있는 새로운 유형의 코드다. 네이티브에 가까운 성능으로 동작하며 컴팩트한 바이너리 포맷을 제공하는 저수준 어셈블리 언어로, C/C++, Rust 등과 같은 언어의 컴파일 타겟으로써 그런 언어로 작성된 프로그램을 웹에서 사용할 있게 해준다. 또한 JavaScript 함께 실행되며 서로를 보완할 있도록 설계되었다.

 

JIT Compiler

V8은 JIT 컴파일을 지원하는데 JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.

JSConf EU 2017에서 발표한 Franziska Hinkelmann님의 자료

  1. Blink 에서 <script> 태그를 만나면, Javascript 스트리밍 을 시작한다.
  2. 스트리밍 으로 전달 받은 UTF-16 문자열은 Scanner 를 이용해 Token (let, for) 을 생성한다.
  3. 생성된 Token 을 가지고, Parser  추상 구문 트리 (AST) 를 만든다.
  4. 만들어진 AST  Ignition 에서 Byte Code 로 변환한다.
  5. 컴파일된 Byte Code TurboFan을 통하여 최적화 한다.

Ignition (Interpreter)

V8에는 Ignition이라는 인터프리터가 있는데 Ignition TurboFan 백엔드를 사용하여 작성된 빠른 저수준 레지스터 기반 인터프리터로 처음 코드를 시작할때 동작하고 생성된 바이트 코드는 TurboFan에게 전달해준다. Ignition은 아래와 같은 이점이 있다.

  • 메모리 사용량 감소(Reduce memory usage)
  • 시작시간 감소(Reduce startup time)
  • 복잡성 감소(Reduce complexity)

TurboFan (Compiler)

코드 실행 중 받는 데이터를 기반으로 코드를 최적화하고 보다 최적화된 버전을 다시 컴파일한다.

더보기

처음으로 Ignition TurboFan V8 v5.9에서 JavaScript 실행을 위해 보편적으로 그리고 독점적으로 사용되었습니다. 또한 v5.9부터 2010년부터 V8 지원했던 기술인 Full-codegen Crankshaft 이상 V8에서 JavaScript 실행을 위해 사용되지 않습니다. 이상 새로운 JavaScript 언어 기능 최적화를 따라갈 없기 때문입니다. 우리는 그것들을 완전히 제거할 계획입니다. 이는 V8 앞으로 전반적으로 훨씬 간단하고 유지 관리하기 쉬운 아키텍처를 갖게 것임을 의미합니다.

https://v8.dev/blog/launching-ignition-and-turbofan

 

참고

  • https://developer.mozilla.org/ko/docs/WebAssembly
  • https://ko.wikipedia.org/wiki/V8_(%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%97%94%EC%A7%84)
  • https://www.cloudflare.com/ko-kr/learning/serverless/glossary/what-is-chrome-v8/
  • https://v8.dev/
  • https://ui.toast.com/posts/ko_20210909
  • https://velog.io/@remon/V8-%EC%97%94%EC%A7%84%EC%9D%B4-%EB%8C%80%EC%B2%B4-%EB%AD%90%EC%95%BC