Compile Hint

출처: Giving V8 a Heads-Up: Faster JavaScript Startup with Explicit Compile Hints · V8

  • V8의 최적화에도 불구하고 시작할때 구문을 분석하고 컴파일하는 경우에 아직도 병목현상이 있다.
  • 초기 스크립트를 컴파일할때 어떤 js function을 컴파일해야할지 알면 페이지 로딩 속도를 높일 수 있다.
  • V8은 페이지가 로드될때 함수를 곧바로 컴파일할지 아니면 나중에 컴파일할지 선택해야한다.
  • 만약 페이지 로드 중에 함수가 호출된다면 바로 컴파일하는 것이 좋다.
    • 스크립트를 처음에 처리할 때, lightWeight parsing을 실행한다. 함수의 끝을 찾는다. 만약에 함수가 나중에 불리게된다면 그때도 파싱을 또 해야되기 때문에 중복작업이 있다.
    • 만약 바로 함수를 컴파일 한다면 스크립트 로딩과 함수 실행이 병렬적으로 실행된다. 만약 나중에 컴파일한다면 메인 스레드는 컴파일이 끝날때까지 실행되지못한다.
  • 실험해봤을때 20개의 웹사이트 중 17개가 즉시 컴파일 했을 때 속도가 향상되었고 평균적으로 630ms 빠르게 실행됐다.
  • 즉시 컴파일 사용하는법 (compile hints 라고한다.)
    • js파일에 //# allFunctionsCalledOnLoad 코멘트를 추가하면 된다.

사용할만한 상황

  • 성능 프로파일링 결과, 시작 병목으로 확인된 함수들
  • 페이지 로드 시 즉시 실행되어야 하는 핵심 기능
  • 코드 스플리팅을 통해 초기 로드에 필요한 청크(chunk)를 분리했을 때, 그 초기 청크 파일에 적용