Google I/O 2016 에서 웹을 주제로 하는 세션 중에 동영상으로 공개된 것은 27편입니다. 이게 전체인지 일부인지는 알 수 없지만 작년에 비하면 상당히 많아졌습니다. 그 중 V8, modern JavaScript, and beyond 라는 세션의 동영상을 간단히 요약해봅니다.
V8의 미션
- Speed up real-world performance for modern JavaScript, and enable developers to build a faster future web.
- 크롬에서 현재 사용 중인 자바스크립트를 빠르게 동작 시키는 것
- 개발자들이 더 빠른 앱을 만들도록 지원하는 것 - 올바른 도구, 언어의 새로운 기능, 다양한 리소스 등
Real-world performance
- 과거
- 마이크로 벤치마크
- 일정한 기능을 반복적으로 테스트해서 속도를 확인
- 테스트 스위트
- 일정한 기능(pdf.js, gameboy 에뮬레이터 등)을 실행
- 지금부터
- 실제 웹 페이지를 대상으로 퍼포먼스 확인
- 구글을 포함하여 전세계의 사이트를 대상으로 자동 확인
JS engine upgrades
- 구조 개선
- GC의 개선
- 메모리가 어느 선을 넘으면 GC했으나
- 16ms마다 진행되는 렌더링에 걸려 GC로 인해 frame을 건너 뛸수도
- frame 사이의 idle time에 일부 GC
- 인터프리터
- 시작을 빠르게
- 컴파일에 걸리는 시간을 짧게
- 메모리 사용량은 적게
- 순수 JS의 실행 시간은 길어지나 파싱, 컴파일에 걸리는 시간이 짧아져 전체 실행 시간은 짧아짐
ES6 & ES7
- M51까지 점진적으로 ES6의 feature를 구현
- M52에서는 ES6과 ES7를 네이티브로 지원
- ES.next도 곧
- 트랜스파일러나 폴리필이 있지만 네이티브로 지원하는 것은 여러 모로 중요하다.
Debugging + Node.js
- V8_inspector support를 Node.js core project에 pull request를 보냈음 (https://github.com/nodejs/node/pull/6792)
- Node.js에서 실행되는 코드를 개발도구에서 디버깅할 수 있음.
WebAssembly
- binary로 된 c/c++ 코드를 실행.
- 주요 브라우저에서 지원.
- 성능 좋음. 2012년 맥북 에어에서 시연.
- 동시에 두 개의 브라우저에서 시연하지만 매끄럽게 동작
- 발표하는 동안 계속 백그라운드에서 동작하고 있었음