피드로 돌아가기
Node.js BlogBackend
원문 읽기
io.js v3.2.0/v3.3.0이 HTTP 파서 최적화와 libuv 1.7.3 업그레이드로 startup time 5% 단축
Weekly Update - Aug 28th, 2015
AI 요약
Context
io.js는 Node.js 커뮤니티 분화 이후 독립적으로 개발되고 있으며, 정기적인 릴리스를 통해 성능 개선과 새로운 기능을 제공하고 있다.
Technical Solution
- HTTP 파서 성능 최적화: http.Server가 net.Socket의 모든 초기 데이터를 소비하고 JavaScript 진입 없이 직접 파싱하도록 변경 (단, 'data' 리스너가 있으면 성능 이득 상실)
- libuv 업그레이드: 1.6.1에서 1.7.3으로 상향하여 네트워크 I/O 성능 개선
- V8 엔진 업그레이드: 4.4.63.26에서 4.4.63.30으로 업데이트
- --link-module 옵션 추가: JavaScript 모듈을 빌드 바이너리에 번들링 가능하도록 configure 기능 확장
- EventEmitter API 변경: EventEmitter.listenerCount(emitter, event) 대신 EventEmitter#listenerCount(event)를 신규 추천 API로 제공
- TLS 암호화 제어: --tls-cipher-list 플래그로 기본 암호 목록을 오버라이드 가능하도록 추가
- REPL 개선: 탭 자동완성이 배열 처리를 개선
- 모듈 로딩 버그 수정: 현재 작업 디렉토리가 없을 때 preloaded 모듈 오류 해결
- 문자열 인코딩 버그 수정: UCS2 인코딩 처리 시 unaligned write 오류 수정
Impact
- Startup time: V8 플래그를 전달하지 않을 때 약 5% 단축
Key Takeaway
런타임 성능 개선은 고수준 API 변경뿐만 아니라 파서 최적화와 같은 저수준 구현 변경을 통해 달성되며, 이러한 변경은 사용자 코드의 인터페이스 사용 패턴에 따라 실제 이득이 달라질 수 있다.
실천 포인트
Node.js 애플리케이션을 개발할 때 HTTP 서버의 성능을 최적화하려면 net.Socket에 'data' 리스너를 추가하지 않음으로써 io.js의 직접 파싱 최적화를 활용할 수 있으며, 신규 EventEmitter#listenerCount() API를 사용하여 deprecated API 사용을 피할 수 있다.