개선된 코드 캐싱
V8은 코드 캐싱을 사용하여 자주 사용되는 스크립트의 생성된 코드를 캐싱합니다. Chrome 66부터 우리는 상위 레벨 실행 후 캐시를 생성하여 더 많은 코드를 캐싱하고 있습니다. 이는 초기 로드 시 파싱 및 컴파일 시간의 20–40% 감소로 이어집니다.
V8은 코드 캐싱을 사용하여 자주 사용되는 스크립트의 생성된 코드를 캐싱합니다. Chrome 66부터 우리는 상위 레벨 실행 후 캐시를 생성하여 더 많은 코드를 캐싱하고 있습니다. 이는 초기 로드 시 파싱 및 컴파일 시간의 20–40% 감소로 이어집니다.
요약: Chrome 66부터 V8은 JavaScript 소스 코드를 백그라운드 스레드에서 컴파일하여 일반적인 웹사이트에서 메인 스레드가 컴파일에 소비하는 시간을 5%에서 20% 정도 감소시킵니다.
Chrome은 41버전부터 V8의 StreamedSource
API를 통해 JavaScript 소스 파일을 백그라운드 스레드에서 구문 분석하는 기능을 지원해 왔습니다. 이를 통해 V8은 Chrome이 네트워크로부터 파일의 첫 번째 청크를 다운로드하자마자 JavaScript 소스 코드 구문 분석을 시작하고, Chrome이 파일을 네트워크로 스트리밍하는 동안 병렬로 구문 분석을 계속 진행할 수 있습니다. 이렇게 하면 파일 다운로드가 완료될 때쯤 V8은 JavaScript 구문 분석을 거의 마칠 수 있기 때문에 로드 시간 향상에 상당한 도움이 됩니다.
Chrome 66에서 메모리 누수를 디버깅하는 것이 훨씬 쉬워졌습니다. Chrome DevTools는 이제 C++ DOM 객체를 추적하고 스냅샷을 찍을 수 있으며 JavaScript에서 참조된 모든 접근 가능한 DOM 객체를 표시할 수 있습니다. 이 기능은 V8 가비지 컬렉터의 새로운 C++ 추적 메커니즘의 이점 중 하나입니다.
요약: 최근 V8 v6.4에서 기본적으로 게으른 역직렬화를 활성화하여 V8의 브라우저 탭당 메모리 소비량을 평균적으로 500 KB 이상 감소시켰습니다. 자세히 알아보세요!
하지만 먼저, V8이 힙 스냅샷을 사용하여 새 Isolate(대략 크롬의 브라우저 탭과 일치)를 생성하는 속도를 어떻게 높이는지에 대해 살펴보겠습니다. 제 동료 Yang Guo는 사용자 정의 시작 스냅샷 기사에서 이에 대해 잘 설명했습니다:
Speedometer 1.0이 2014년에 처음 출시된 이후, Blink와 V8 팀은 이 벤치마크를 인기 있는 JavaScript 프레임워크의 실제 사용을 위한 기준으로 삼아왔으며 상당한 속도 향상을 달성했습니다. 이러한 향상이 실제 사용자에게 주는 혜택을 실시간 웹사이트를 측정하여 독립적으로 확인했으며, 인기 있는 웹사이트의 페이지 로드 시간이 개선됨에 따라 Speedometer 점수도 향상되었습니다.
코드 커버리지는 애플리케이션의 특정 부분이 실행되었는지 여부와 선택적으로 얼마나 자주 실행되었는지에 대한 정보를 제공합니다. 이는 테스트 스위트가 특정 코드베이스를 얼마나 철저히 검증하는지 판단하는 데 자주 사용됩니다.
자바스크립트 개발자로서 코드 커버리지가 유용할 수 있는 상황에 자주 처하게 될 것입니다. 예를 들어:
console.log
를 이용한 printf
스타일 디버깅이나 코드를 수동으로 디버깅하는 대신, 코드 커버리지는 애플리케이션의 어떤 부분이 실행되었는지에 대한 실시간 정보를 표시할 수 있습니다.