JavaScript 엔진의 동작 원리 (V8 기준)

Source

  • Evernote/Inbox/🚀⚙️ JavaScript Visualized the JavaScript Engine - DEV Community 👩‍💻👨‍💻.md

Summary

이 문서는 V8 엔진을 기준으로 JavaScript 코드가 기계가 이해할 수 있는 형태로 변환되는 과정을 단계별로 설명한다. 주요 단계는 다음과 같다: 1) Byte Stream Decoder: 네트워크/캐시에서 받은 바이트 스트림을 토큰으로 변환한다. 2) Parser & Pre-parser: 토큰을 기반으로 AST(Abstract Syntax Tree)를 생성한다. Pre-parser는 즉시 실행되지 않는 코드를 지연 처리하여 로딩 속도를 높인다. 3) Interpreter: AST를 순회하며 바이트코드를 생성한 후 AST를 메모리에서 제거한다. 4) Optimizing Compiler: 실행 중 수집된 타입 피드백을 바탕으로 자주 실행되는 코드를 최적화된 머신 코드로 변환하여 성능을 향상시킨다.

Key Points

  • V8 엔진은 JavaScript 코드를 바이트 스트림에서 토큰, AST, 바이트코드, 최적화된 머신 코드로 순차적으로 변환한다.
  • Pre-parser 는 즉시 필요하지 않은 코드의 파싱을 지연시켜 초기 로딩 시간을 단축한다.
  • Interpreter 는 AST 를 기반으로 바이트코드를 생성하며, 생성 후 AST 는 메모리 해제를 위해 삭제된다.
  • Optimizing Compiler 는 런타임 중 수집된 타입 정보와 실행 빈도를 분석하여 핫 패스(Hot Path) 코드를 최적화된 머신 코드로 재컴파일한다.
  • 동적 타입 언어인 JavaScript 의 성능 저하를 방지하기 위해 엔진은 실행 시점의 타입 정보를 활용한 최적화를 수행한다.