Back to Roadmap
8:00

Code Splitting & Lazy Loading

Learn how to improve frontend performance by splitting code into smaller bundles and loading resources only when needed

8 MIN READ VERIFIED CURRICULUM

Code splitting and lazy loading are performance optimization techniques used in modern frontend development to reduce initial load time and improve application speed.

They ensure that users only download the JavaScript and resources they actually need at a given time.

What is Code Splitting?

Code splitting is the process of breaking a large JavaScript bundle into smaller chunks that can be loaded on demand.

Instead of loading the entire application at once, the browser loads only the required parts initially.

Why Code Splitting Matters

Large JavaScript bundles increase page load time and negatively impact user experience.

Code splitting reduces the initial payload, making applications faster and more responsive.

How Code Splitting Works

Modern bundlers like Webpack, Vite, and Rollup automatically split code based on dynamic imports and route-based loading.

Each split chunk is loaded only when it is required by the application.

import('./mathUtils').then(module => {
  module.add(2, 3);
});
javascript

Code Splitting in React

React supports code splitting using React.lazy and Suspense for dynamic component loading.

import React, { lazy, Suspense } from 'react';

const Dashboard = lazy(() => import('./Dashboard'));

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <Dashboard />
    </Suspense>
  );
}
javascript

What is Lazy Loading?

Lazy loading is a technique where resources are loaded only when they are needed instead of loading everything upfront.

It is commonly used for images, components, routes, and heavy assets.

Lazy Loading Components

In React, lazy loading components helps reduce the initial bundle size significantly.

const Profile = lazy(() => import('./Profile'));
javascript

Lazy Loading Images

Images can be lazy loaded using the native loading attribute in HTML.

<img src="image.jpg" alt="example" loading="lazy" />
javascript

Route-Based Code Splitting

In large applications, routes are often split into separate chunks to improve performance.

Each route is loaded only when the user navigates to it.

const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));

<Route path="/home" element={<Home />} />
<Route path="/about" element={<About />} />
javascript

Benefits of Code Splitting

Code splitting improves initial load time, reduces bandwidth usage, and enhances perceived performance.

It also allows better caching since only changed chunks need to be re-downloaded.

Benefits of Lazy Loading

Lazy loading improves performance by deferring non-critical resource loading.

It ensures that users interact with essential content faster.

Common Mistakes

Overusing lazy loading can lead to too many network requests and performance overhead.

Not providing proper loading fallbacks can also hurt user experience.

Optimizing Lazy Loading

Always group related components into meaningful chunks instead of splitting everything unnecessarily.

Use suspense fallbacks like skeleton loaders or spinners for better UX.

Real-World Usage

Code splitting and lazy loading are widely used in SaaS dashboards, e-commerce platforms, and large-scale React applications.

They are essential for optimizing performance in production-grade applications.

Best Practices

Use route-based splitting for large applications and component-based splitting for heavy UI elements.

Always measure performance impact using tools like Lighthouse or Web Vitals.

Summary

Code splitting and lazy loading are essential techniques for building fast and scalable frontend applications.

They reduce initial load time and ensure users only load what they need when they need it.