Benchmarking State Management Libraries in Data-Heavy React Apps

This ad is not shown to multipass and full ticket holders
React Summit
React Summit 2026
June 11 - 15, 2026
Amsterdam & Online
The biggest React conference worldwide
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit 2026
React Summit 2026
June 11 - 15, 2026. Amsterdam & Online
Learn more
Bookmark
Rate this content

Which state library is the right choice for your app – Redux, MobX, Zustand, Jotai, or no state manager at all? In this talk, we’ll compare them using real metrics in a realistic data-heavy app that visualises large datasets with live data charts and 3D rendering.

This talk has been presented at React Advanced 2025, check out the latest edition of this React Conference.

FAQ

Elina concluded that while there are performance differences, all libraries were fast enough for real users, and the choice of library should fit the existing application structure and data thinking.

A key takeaway is that propagation differences are in milliseconds, whereas rendering work is significantly larger, so choosing a library that aligns with your application's existing structure is more important for performance.

Elina is a front-end developer at Physics X.

The application used for the experiment is called Optimizer, an engineering tool for running and exploring optimization jobs.

The application originally used the Recoil state management library.

Elina needed to switch from Recoil because it was archived.

Lina compared Zustand, Redux Toolkit, Recoil, Jotai, and MobX in the experiment.

The main performance metrics measured were save-to-state time, time to update the state with new data, and render time.

Performance is also about how well the application fits the state library, including the design of state shape and subscription boundaries.

Elina's experiment focuses on swapping state management libraries in a production application and measuring their performance to see if the choice significantly affects performance.

Elina Denisova
Elina Denisova
14 min
01 Dec, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Elina, front-end developer at PhysicsX, compares state management library performance. Data-heavy UI visualization challenges. Recoil replaced; exploring Jotai, Redux Toolkit, Zustand, MobX. Does the library choice significantly impact real app performance? Real timings measurement experiments; safe-to-state time and render time analysis across libraries with various payload sizes. Jotai, MobX, Recoil, and RTK performance focus. Comparing Recoil, Jotai, RTK, Redux, and MobX in state management. User interaction testing for state propagation and highlighting across plots. Performance comparison of state management libraries focusing on rendering and optimization experiments with plot updates. Libraries compared for performance in storing dates and rendering data on plots. Rankings show Recoil, MobX, Jotai around two seconds, Zustand, RTK around four seconds. Consider library fit with your data structure and design state shape and subscription boundaries accordingly.

1. Analyzing State Management Library Performance

Short description:

Elina, front-end developer at Physics X, compares state management library performance. Data-heavy UI visualization challenges. Recoil replaced; exploring JotAi, Redux toolkit, Dustant, JotAm, Mubex. Does the library choice significantly impact real app performance?

Hello, I'm Elina. I'm a front-end developer at PhysicsX. I'll show you today a production application experiment where I swapped state management libraries and measured their performance.

The question is, does the library choice significantly affect performance, or are the differences small enough that we should prioritize other parameters? I choose one of our applications for experiments. Optimizer is our engineering tool for running and exploring optimization jobs. It connects to our internal compute and AI libraries, so we can define objectives, constraints, parameters, run experiments, and analyze the results all in one place.

Where does all this data for visualization come from? As input, we have a sample with metrics, parameters, and geometry. As output, we get a lot of candidates. At each step of an optimization job, we can have thousands of candidates, and there can be thousands of steps. We store all this data in a database and send it to the web via REST API to inspect in different ways. There is a lot of data, so I'm always working on visualizing it clearly in a faster way. In reality, it looks like this. Data-heavy UI, quiz tables, charts, live updates, and 3D. We built this up last year, and we used Recoil for state management. It was fast, simple, and allowed until this year. Unfortunately, Recoil were archived, so we have to move.

But how do we decide what to switch to? First idea, Jotai. Similar models, easy migrations from atoms and selectors to atoms and derived atoms. Minimal code changes. We also use Redux Toolkit in another app, so the team knows, and it has a strong ecosystem and predictable flow. Zustand is lightweight with direct updates and simple selectors. MobX gives reactive states and computed values with granular subscriptions. In short, we had zero realistic paths. So now here the state management libraries I will compare. Zustand, small global store with direct updates, Redux Toolkit, centralized store with action-reducer flow, Recoil, atom-based state with selector, Jotai, atom-based state with derived data, MobX reactive state that autosyncs with UI. All of them have different internals, different designs, and different costs when they're up and released. But the question is, does this difference actually matter in real app? I use same app, same pages, same components, same data sets, same UI interactions. I only swap state management integrations. No architecture rewrite. And because this app was originally written for Recoil, other libraries may encounter patterns that are not perfect for them.

2. Analyzing State Management Performance Metrics

Short description:

Real timings measurement experiments; safe-to-state time and render time analysis across libraries with various payload sizes. Jotai, MobX, Recoil, and RTK performance focus.

That is reality in most real migrations. So instead of guessing complexities, I decided to measure real timings. For the first experiments, I disabled infinite scroll in our list of optimization and loaded exactly five batches. Each next batch contained larger optimization by increasing the amount of steps in this optimization. Same data for every library. Each library is tested more than 10 times. We will be measuring safe-to-state time, time to update the state with new data, and trend of time. Time for React components to render after start update.

And we will measure this on a scaling. How these times grow as payload size increase across batches. How we are measuring safe-to-state time? Right before writing to the store, we start a timer. We save the batch using set optimization, and then wait for micro-tasks with await promise resolve. After that, we stop and compute the save time. Report batch number, data size, library, and measure times to the server. How we are measuring render time? We wrap the table container with recoil profile, and on the render callback, we use commit time to compute render time. Then, send the render measurement for that batch to the server.

Let's look at the results. Here, I run the exact same test 10 times per library. Each run loads five batches with growing payloads. And I display three things, render time, safe-to-state time, and the total time. These numbers depend a lot on my code and how well I know each library. So, that big spike is likely on me, not as a stand. On the next slide, I drop it and focus on Jotai, MobX, Recoil, and RTK. First batch is always the slowest, because this is a moment when the state and UI transition from empty to real data. The store creates its initial structure, and the table builds its layout for the first time. Payloads increases, but performance barely changes. So, the bottom line isn't memory transfer. It's mostly UI and subscription work on the first update. Jotai keeps states small and per atom. We compute only what we read, which helps to win on save time.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Everything Beyond State Management in Stores with Pinia
Vue.js London Live 2021Vue.js London Live 2021
34 min
Everything Beyond State Management in Stores with Pinia
Top Content
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
Using useEffect Effectively
React Advanced 2022React Advanced 2022
30 min
Using useEffect Effectively
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
React Query: It’s Time to Break up with your "Global State”!
React Summit Remote Edition 2020React Summit Remote Edition 2020
30 min
React Query: It’s Time to Break up with your "Global State”!
Top Content
Global state management and the challenges of placing server state in global state are discussed. React Query is introduced as a solution for handling asynchronous server state. The Talk demonstrates the process of extracting logic into custom hooks and fixing issues with state and fetching logic. Optimistic updates with mutation are showcased, along with the benefits of using React Query for data fetching and mutations. The future of global state management is discussed, along with user feedback on React Query. The Talk concludes with an invitation to explore React Query for server state management.
Jotai Atoms Are Just Functions
React Day Berlin 2022React Day Berlin 2022
22 min
Jotai Atoms Are Just Functions
Top Content
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
Announcing Starbeam: Universal Reactivity
JSNation 2022JSNation 2022
27 min
Announcing Starbeam: Universal Reactivity
Starbeam is a library for building reactive user interfaces with JavaScript, similar to Svelte, Vue, and Ember. It provides a data structure and query feature for filtering and sorting. The useStarBeam function ensures JSX reconciliation only occurs when reactive dependencies change. Starbeam tracks every read and write operation to update the component accordingly. It can be used with React and other frameworks, and offers debugging tools and locale integration.
Thinking in React Query
React Summit 2023React Summit 2023
22 min
Thinking in React Query
Top Content
Watch video: Thinking in React Query
React Query is not a data fetching library, but an Asian state manager. It helps keep data up to date and manage agent life cycles efficiently. React Query provides fine-grained subscriptions and allows for adjusting stale time to control data fetching behavior. Defining stale time and managing dependencies are important aspects of working with React Query. Using the URL as a state manager and Zustand for managing filters in React Query can be powerful.

Workshops on related topic

Rethinking Server State with React Query
React Summit 2020React Summit 2020
96 min
Rethinking Server State with React Query
Top Content
Featured Workshop
Tanner Linsley
Tanner Linsley
The distinction between server state and client state in our applications might be a new concept for some, but it is very important to understand when delivering a top-notch user experience. Server state comes with unique problems that often sneak into our applications surprise like:
- Sharing Data across apps- Caching & Persistence- Deduping Requests- Background Updates- Managing “Stale” Data- Pagination & Incremental fetching- Memory & Garbage Collection- Optimistic Updates
Traditional “Global State” managers pretend these challenges don’t exist and this ultimately results in developers building their own on-the-fly attempts to mitigate them.
In this workshop, we will build an application that exposes these issues, allows us to understand them better, and finally turn them from challenges into features using a library designed for managing server-state called React Query.
By the end of the workshop, you will have a better understanding of server state, client state, syncing asynchronous data (mouthful, I know), and React Query.
State Management in React with Context and Hooks
React Summit Remote Edition 2021React Summit Remote Edition 2021
71 min
State Management in React with Context and Hooks
Workshop
Roy Derks
Roy Derks
A lot has changed in the world of state management in React the last few years. Where Redux used to be the main library for this, the introduction of the React Context and Hook APIs has shaken things up. No longer do you need external libraries to handle both component and global state in your applications. In this workshop you'll learn the different approaches to state management in the post-Redux era of React, all based on Hooks! And as a bonus, we'll explore two upcoming state management libraries in the React ecosystem.