Node.js V8 Build Option
Node.js는 기본적으로 JavaScript Runtime이다. JavaScript Runtime은 JavaScript를 실행시킬수 있는 환경을 뜻하며 코드를 해석하고 실행하는 핵심 역할을 담당한다. Node.js 에서 여러 JavaScript 엔진중에서 구글이 개발한 V8 엔진을 사용하고 있는데, Node.js 빌드시 V8 Option을 전달하여 Customization 할 수 있다.
V8 Option은 Node.js Core코드와 직접적으로 연관이 있는 제어 코드 외 deps/v8
에서 library 빌드 시 전달할 수 있는 옵션으로 나뉜다.
Node.js Options
Lite Mode
V8은 메모리 사용량 보다 성능 기본적으로 초점을 맞추고 있다. 그러한 개발 방향과 다소 반대의 상황에서 사용할 수 있는 옵션으로 기본적인 메모리 사용량을 줄이고 JIT (Just-In-Time) 컴파일을 꺼서 메모리 소비를 더욱 줄인다.
JIT(Just-In-Time) 컴파일은 프로그램을 실행하는 동안 실제로 필요한 코드 부분만 컴파일하는 기술이다. 일반적으로 JavaScript 코드는 한 줄씩 인터프리터에 의해 해석되지만, JIT 컴파일러는 자주 사용되는 함수나 루프 같은 핵심 코드를 미리 컴파일하고 최적화하여 실행 속도를 높인다.
관련 Configuration
789 | parser.add_argument('--v8-lite-mode', |
CodeCache 기능
JavaScript 엔진은 CodeCache 기능을 제공한다. CodeCache는 컴파일된 코드를 캐시로 저장하는 공간이며, 반복적으로 사용되는 코드를 저장해두어 빠른 실행을 가능하게 한다. 이는 웹 애플리케이션의 성능을 향상시키는 데 도움이 된다.
관련 Configuration
626 | parser.add_argument('--without-node-code-cache', |
Snapshot
Snapshot은 초기 런타임 상태를 저장하고, 이를 나중에 다시 불러와 재사용할 수 있게 해준다. 이로써 애플리케이션의 시작 시간을 단축시키고 초기 로딩 시간을 최적화할 수 있다.
관련 Configuration
612 | parser.add_argument('--write-snapshot-as-array-literals', |
823 | parser.add_argument('--v8-enable-snapshot-compression', |
Pointer Compression
V8 엔진이 JavaScript 객체에 대한 포인터를 저장할 때 사용되는 메모리를 줄이기 위한 최적화 기능이다. 기본적으로 V8는 64비트 포인터를 사용하여 객체를 가리키지만, Pointer Compression을 활성화하면 객체 포인터를 더 작은 크기 (32비트)의 포인터로 압축하여 메모리를 절약할 수 있다. 작은 포인터 크기는 환경에 따라서 CPU 캐시에서 객체를 로드하는 데 더 효율적일 수 있으며, 이로 인해 더 빠른 실행 속도를 얻을 수도 있다. 다만 이 옵션을 크면 주소공간이 4GB로 제한되며 따라서 max heap 크기도 그 크기로 한정된다.
관련 Configuration
488 | parser.add_argument('--experimental-enable-pointer-compression', |
Runtime V8 Options
Node.js 실행시점에도 V8 동작에 관한 세부 설정을 할 수 있는데 이러한 옵션을 빌드 시점에 default로 적용할 수 도 있다. 전체옵션을 보고싶다면 아래와 같이 실행하면 된다.
1 | node --v8-options |
관련 Configuration
500 | parser.add_argument('--v8-options', |