Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
Fetch in Depth: Streaming Responses, AbortSignal.any, keepalive, fetchLater and Angular 22's Fetch Backend
To process a large response without waiting for all of it, read response.body line by line with TextDecoderStream; AbortSignal.any combines a timeout with the user's cancel, and keepalive and fetchLater send data while the page closes. With real output from Chromium 158 and WebKit 27.2 we show the HTTP/2 requirement of upload streaming, keepalive's 64 KiB limit, WebKit differences and route-level withXhr() for upload progress in Angular 22's HttpClient.
Node.js Streams: Readable, Writable, Transform, pipeline() and Backpressure
Node.js streams process data piece by piece; waiting for drain when write() returns false, which is respecting backpressure, keeps memory constant, and pipeline() wires that into every stage together with error handling. With real measurements: a producer that ignores false growing the heap to 182 MB, pipe() leaving the source file open, a 505 MB Bookstore order export streamed with 147 MB RSS, and the same job taking 993 MB in memory.