WebStreams 고속화와 fast-webstreams 도입
Node.js의 WebStreams를 빠르게 만들기 위해 fast-webstreams와 관련 최적화를 도입했습니다.
교안에 영향
예전 안내 글에서 WebStreams의 pipeThrough, pipeTo, reader.read() 성능이 그대로라고 설명한 부분은 더 이상 맞지 않을 수 있습니다.
요약
- fast-webstreams로 ReadableStream, WritableStream, TransformStream의 공통 경로를 Node.js 스트림 기반으로 빠르게 처리합니다. - fast 스트림끼리의 pipeThrough와 pipeTo는 지연 연결 후 pipeline() 한 번으로 이어 붙여 성능을 높입니다. - reader.read()는 버퍼에 데이터가 있으면 동기적으로 해결해 불필요한 Promise와 요청 객체 생성을 줄입니다. - fetch() 응답 본문과 React Server Components 같은 byte stream 경로도 더 빠르게 처리합니다. - nodejs/node#61807에 read() fast path와 pipeTo() batch reads를 올려 상위 버전에도 개선을 반영합니다.
바뀐 것
새 기능
- fast-webstreams 라이브러리를 도입해 WHATWG ReadableStream, WritableStream, TransformStream을 Node.js 스트림 위에서 구현합니다.
개선
- fast 스트림끼리 pipeThrough와 pipeTo를 연결할 때 즉시 파이핑하지 않고 upstream 링크를 모아 pipeline() 한 번으로 처리합니다.
- reader.read()에서 버퍼에 데이터가 있으면 즉시 해결된 Promise를 돌려 동기적으로 읽습니다.
- React Flight 패턴의 byte stream 경로에 LiteReadable을 사용해 start()와 enqueue() 중심 처리 성능을 높입니다.
- patchGlobalWebStreams()로 Response.prototype.body를 감싸 fetch() 응답 본문과 transform 체인을 더 빠르게 처리합니다.
- nodejs/node#61807에 read() fast path와 pipeTo() batch reads를 반영해 Node.js 본체의 WebStreams 성능도 높입니다.
기타
- Web Platform Tests와 벤치마크를 바탕으로 구현을 조정해 사양 호환성과 성능을 함께 검증했습니다.