Code Splitting and Lazy Loading for Improved Performance

In the world of web development, optimizing performance is crucial for providing a smooth and responsive user experience. As applications grow in complexity and size, it becomes necessary to adopt techniques that can improve loading speed and reduce the initial bundle size. Two popular strategies for achieving this in ReactJS are code splitting and lazy loading.

Code Splitting

Code splitting is the process of breaking down your application's code into smaller, manageable chunks. Instead of bundling all the JavaScript code into a single file, you can divide it into multiple smaller files. This allows the browser to only load the required code when needed, rather than downloading unnecessary code upfront.

With code splitting, you can prioritize and load critical code upfront while deferring the non-critical code until later. This can significantly improve the initial loading time of your application, as the browser only needs to download and process the essential code required to render the initial view. Additional code chunks can be loaded asynchronously as the user interacts with the application.

Lazy Loading

Lazy loading is closely related to code splitting and involves loading parts of your application on-demand, as and when required. It defers the loading of certain modules or components until they are needed, rather than loading everything upfront. By lazily loading resources, you can reduce the overhead of initial loading and enhance the perceived performance of your application.

One common scenario for applying lazy loading is when dealing with routes in React. Instead of loading the entire JavaScript bundle upfront, you can split your routes into separate components and load them only when the corresponding route is accessed. This ensures that users only download the JavaScript code they need for the current page, reducing the initial bundle size and improving overall performance.

ReactJS and Code Splitting with React Router

React Router, a popular routing library for React applications, provides built-in support for code splitting and lazy loading. By leveraging React Router along with dynamic imports, you can easily achieve the benefits of code splitting and lazy loading.

Here's an example of a code-split route using React Router:

import React, { lazy, Suspense } from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";

const Home = lazy(() => import("./components/Home"));
const About = lazy(() => import("./components/About"));

const App = () => {
  return (
      <Suspense fallback={<div>Loading...</div>}>
          <Route exact path="/" component={Home} />
          <Route path="/about" component={About} />

export default App;

In the above example, the Home and About components are lazily loaded only when the corresponding routes are accessed. The Suspense component allows you to display a fallback loader while the necessary code chunks are being loaded.


Code splitting and lazy loading are powerful techniques for optimizing the performance of ReactJS applications. By splitting your code into smaller chunks and loading them on-demand, you can improve the initial loading time, reduce the bundle size, and enhance the overall user experience. The combination of code splitting with React Router and lazy loading can be a game-changer in building performant web applications. So, embrace these techniques and enjoy the benefits of improved performance in your ReactJS projects!

noob to master © copyleft