Why are NodeJS projects often "bundled", but not other interpreted languages?

Cyclohexane@lemmy.ml to Programming@programming.dev – 26 points –

I mean, sure, that's probably heavily influenced by the need for bundling for the frontend.

But it isn't done blindly. Bundlers reduce the overall size of the code, either due to minification or tree-shaking (removing unused modules). It also removes the filesystem overhead of resolving and opening other modules.

Would bundling be useful in other interpreted languages?

I suppose you may count JVM's compilation to bytecode as being very similar.

10

You are viewing a single comment

The size of the code is mostly irrelevant if you're not shipping it to clients over the network on every request. Short of truly gargantuan statically-linked binaries in compiled languages, anyway, and bundling isn't really an applicable concept there. And similarly, the overhead of loading modules from the filesystem is a one-time cost that's mostly irrelevant for server-side code that runs for days or weeks or years at a time.

On the other hand, the complexity overhead of adding the additional bundling step is a major drag on development productivity, debuggability, etc.

The size of the code still impacts your deployment. Moreover, if you're using something like AWS lambda, small changes can have significant influence on cold start time.

I agree that an extra step is not desirable, but this would only be done for production deployments (and consequently pre-prod if you do that).

Lambda is certainly an interesting case for this, I'll give you that. Outside of that, though, the impact on deployment speed is also not relevant; the bottlenecks for deployment are things like CI, canarying, even rolling blackout windows across AZs, etc. The actual time spent transmitting your build artifact over the network is completely negligible even at huge sizes

1 more...
1 more...