Chapter 3. Node.js

Outside browsers, there’s only one JavaScript runtime of note, and that’s Node.js.1 Although it started as a platform emphasizing single-threaded concurrency in servers with continuation-passing style callbacks, a lot of effort went into making it a general-purpose programming platform.

Many tasks performed by Node.js programs don’t fit into its traditional use case of serving web requests or handling network connections. Instead, a lot of newer Node.js programs are command-line tools acting as build systems, or parts of them, for JavaScript. Such programs are typically heavy on I/O operations, just like servers are, but they also typically do a lot of data processing.

For example, tools like Babel and TypeScript will transform your code from one language (or language version) to another. Tools like Webpack, Rollup, and Parcel will bundle and minify your code for distribution to your web frontend or to other environments where load times are crucial, like serverless environments. In situations like these, while there’s a lot of filesystem I/O going on, there’s also a lot of data processing, which is generally done synchronously. These are the sorts of situations where parallelism is handy and might get the job done quicker.

Parallelism can also be useful in the original Node.js use case, which is servers. Data processing may happen a lot, depending on your application. For example, server side rendering (SSR) involves a lot of string manipulation where the source ...

Get Multithreaded Javascript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.