Stephen Cooper

A Practical Guide to Reducing Bundle Size

Are decorators and barrel files secretly bloating your bundle? Learn how common patterns break tree-shaking and discover practical techniques to fix them.

A Practical Guide to Reducing Bundle Size
#1about 3 minutes

Why bundle size is important for user experience

Reducing bundle size leads to faster load times and a better user experience, which can also improve SEO rankings through better web vitals.

#2about 1 minute

Understanding tree shaking and dead code elimination

Tree shaking is a form of dead code elimination that removes unused code from the final bundle by analyzing the application's import graph.

#3about 4 minutes

Managing side effects to enable tree shaking

Bundlers avoid removing code with potential side effects, but you can use the `sideEffects: false` property in `package.json` to signal that unused imports are safe to drop.

#4about 2 minutes

Using pure annotations for advanced tree shaking

The `/*#__PURE__*/` annotation tells the bundler that a function call is side-effect-free, allowing it to be removed if its return value is unused.

#5about 3 minutes

How decorators and static properties break tree shaking

Code patterns like decorators and static class properties can create top-level references that prevent bundlers from identifying and removing unused code.

#6about 1 minute

Avoiding barrel files to improve tree shaking

Re-exporting modules from a single "barrel" file (`index.js`) can prevent tree shaking because it forces the bundler to evaluate all exports.

#7about 2 minutes

The importance of testing your bundle size

Small code changes can unexpectedly break tree shaking, so it's crucial to continuously test bundle size using tools like `size-limit` in your CI/CD pipeline.

#8about 1 minute

Debugging bundle size with source map explorer

When tests fail, tools like `source-map-explorer` and `sonder` help visualize the contents of your bundle to identify what code is being incorrectly included.

#9about 2 minutes

How class properties can prevent minification

Minifiers cannot shorten public or TypeScript-private class property names because they could be accessed externally, preserving their full string length in the bundle.

#10about 2 minutes

Using native private fields for better minification

Using native JavaScript private fields (with `#`) allows minifiers to safely mangle property names, but requires targeting modern ES versions to avoid polyfills.

#11about 4 minutes

Advanced patterns for optimizing minification

Further reduce bundle size by replacing verbose error messages with codes, passing class properties as function arguments, and inlining temporary variables.

#12about 1 minute

Comparing build tools and compression methods

The choice of build tool involves a trade-off between build speed and final bundle size, and selecting a modern compression algorithm like Brotli can provide additional savings.

Related jobs
Jobs that call for the skills explored in this talk.

job ad

Saby Company
Delebio, Italy

Intermediate

test

Milly
Vienna, Austria

Intermediate

Featured Partners

Related Articles

View all articles
CH
Chris Heilmann
Dev Digest 136 - No JS(on) of mine
News and ArticlesDouglas Crockford is our featured video, so let's talk about evolving JavaScript and all things JSON. Judicious JSON explains all the weird things in it, you can learn why it can be incredibly slow, people wonder what even is a JSON ...
Dev Digest 136 - No JS(on) of mine
CH
Chris Heilmann
All the videos of Halfstack London 2024!
Last month was Halfstack London, a conference about the web, JavaScript and half a dozen other things. We were there to deliver a talk, but also to record all the sessions and we're happy to share them with you. It took a bit as we had to wait for th...
All the videos of Halfstack London 2024!

From learning to earning

Jobs that call for the skills explored in this talk.

Code cleaner

Code cleaner

Cleanup Services
Rome, Italy

Remote
45-50K
Intermediate
PHP
JavaScript