Introducing Code Splitting to a React Web App

In previous episode we introduced routing. App starts to have a structure: I’ll try to run a production build to evaluate code size.

$ npm run build

Code splitting

Code-splitting your app can help you “lazy-load” just the things that are currently needed by the user, which can dramatically improve the performance of your app. While you haven’t reduced the overall amount of code in your app, you’ve avoided loading code that the user may never need, and reduced the amount of code needed during the initial load.

React provides out of the box solution for code splitting: React.lazy(): let’s test it with highlighted polls. I convert HighlighedPolls.route() to use a lazily loaded component.

Because React.lazy only works with default exports, I convert named export in features/highlightedPolls/component.tsx:

Changes to route.tsx are straighforward:

I used same strategy also in features/poll/route.tsx, then I changed imports in App.tsx not to include actual components via module:

If you make a new production build, you will observe a new chunk has been created.

Split out Firebase

I take a guess: Firebase library can be splitted to slim down code size. To do so I will create a new component in app/features/Firebase.tsx:

Code inside App.tsx will be very reduced: no Firebase imports, no authentication state.


But it doesn’t work. If you try to reload you will get error:

A React component suspended while rendering, but no fallback UI was specified. Add a <Suspense fallback=…> component higher in the tree to provide a loading indicator or placeholder to display.

I admit it’s crystal clear and solution is pretty simple:

Another production build will result in a few more chunks:



Call me Muccy. I’m a Senior iOS Developer.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Marco Muccinelli

Marco Muccinelli

Call me Muccy. I’m a Senior iOS Developer.