피드로 돌아가기
Node.js 6.8.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 6.8.0이 fs 모듈 상속 구조 변경과 setTimeout 성능 최적화로 스트림 호환성 개선 및 타이머 성능 22% 향상

Node.js 6.8.0 (Current)

2016년 10월 12일5intermediate

Context

Node.js의 파일 시스템 스트림 구현이 Stream.Writable과의 상속 관계가 명확하지 않아 stdio 파이핑 시 스트림 호환성 문제가 발생했다. 또한 setTimeout/setInterval 성능이 충분하지 않아 고빈도 타이머 작업에서 병목이 되고 있었다.

Technical Solution

  • SyncWriteStream 클래스를 Stream.Writable에서 직접 상속하도록 변경: stdio가 파일로 파이핑될 때 stdout과 stderr이 진정한 Writable 스트림으로 동작
  • Duplex 스트림의 instanceof Stream.Writable 검사가 올바르게 작동하도록 수정: 스트림 타입 체크 신뢰성 향상
  • http.request() API에 timeout 옵션 추가: HTTP 요청 레벨에서 타임아웃 제어 가능
  • 모듈 로더가 자체 realpath 캐시 유지하도록 변경: 경로 해석 성능 향상
  • setTimeout/setInterval 내부 구현 최적화: 타이머 처리 알고리즘 개선
  • fs.existsSync() 함수의 deprecated 상태 해제: 동기 파일 존재 여부 확인 기능 복구

Impact

setTimeout/setInterval 성능이 최대 22% 향상되었다.

Key Takeaway

Node.js 스트림 API의 상속 체계를 명확히 정립하면 stdio 파이핑 같은 저수준 I/O 작업의 신뢰성이 향상되며, 타이머 알고리즘 최적화는 이벤트 루프 기반 애플리케이션의 응답성을 직접적으로 개선한다.


Node.js 애플리케이션에서 파일로 stdout/stderr을 파이핑할 때 이 버전 이상에서는 스트림 instanceof 체크가 정확해져 조건부 로직을 더 안정적으로 작성할 수 있으며, 고빈도 타이머(requestAnimationFrame 폴리필 등)를 사용하는 경우 이전 버전 대비 22% 향상된 처리량을 기대할 수 있다.

원문 읽기