React/Redux Performance and Optimization
React Docs: Performance
The React doc pages on performance. Describes the core concepts, including shouldComponentUpdate, using immutable data, and the Performance API for benchmarking.
React, Inline Functions, and Performance
An excellent article Ryan Florence that pushes back against the "creating functions in render is slow" conventional wisdom in the React community. This article is a must-read discussion on React performance.
Performance Engineering with React
A 2-part series on React performance. Excellent information. Goes in-depth on use of the Perf API, shouldComponentUpdate, shallow equality, and how to properly profile components. Highly recommended. Further useful discussion in the HN comment thread.
Respectable React Components
A slideshow that walks through the core concepts of managing good React performance.
shouldComponentUpdate Will Short-Circuit an Entire Subtree of Components in React
A reminder that SCU skips a component's children as well as that component, with a demo.
Index as a Key is an Anti-Pattern
A reminder that unique keys are the best idea for arrays of components.
React.js pure render performance anti-pattern
Looks at common ways that you might accidentally stop pure rendering from doing its job, such as passing in new object references or creating new functions as props.
How to Make Your React Apps 15x Faster
A couple quick tips: using NODE_ENV=production, and Babel's React constant/inline transformations
Optimising React rendering
Another couple quick tips: only updating changed elements, and making children smarter
Performance optimisations for React applications
Covers ways to make update checks fast and easy. (NOTE: the advice given to "denormalize" data may not be the best approach - see discussion with Dan Abramov in the comments.)
Should I use shouldComponentUpdate?
A reminder that
shouldComponentUpdateis itself code that has to execute, and that using it involves measured tradeoffs.
"shouldComponentUpdate - using it for performance optimizations"
Discussion on pros, cons, and approaches to using
A Cartoon Guide to Performance in React
An excellent presentation by Lin Clark of Code Cartoons. Covers what work browsers do when rendering, what work React does, and the main ways you can improve React performance. Very clear and easy to understand.
Component Rendering Performance in React
A comparison of how fast rendering happens in React 14 vs 15, and functional components vs class components
Performance Conditionally Rendered Content in React
A tip for improving performance when conditionally rendering components: use a function as a child, and only call that function if the condition is true.
Dan Abramov - "Don't stress over binding in render"
Dan advises not to worry about binding methods in render functions unless profiling shows it's a real perf problem for you
Real-World React Debugging
A talk on strategies for debugging React apps, with slides.
Don't Use Bind when Passing Props
Advice on approaches to function binding, with further discussion.
React Perf Debugging: Animation and FLIPping
A deep dive into some tricky issues that come up with running animations, and some ways to work around those.
Virtualizing the Virtual DOM
Discussion and examples of using the "virtualization" technique to only render list components that are currently in view.
Creating more efficient React views with windowing
An excellent talk on performance topics from Brian Vaughn, a React core team member and author of the React-Virtualized library. Covers sources of slowness, ways to avoid re-renders, and a deep look at "windowing/virtualization" for high-performance lists.
React Component Profiling
Tips on using the new browser devtools integration capability in React 15.4 to track component performance.
React Snippets: Debug Component performance with ES7 Annotations
Demonstrates using a custom decorator to wrap components and log information on when and why components re-rendered
How to Benchmark React Components: The Quick and Dirty Guide
Suggestions for using React's Perf API to benchmark component rendering, and use of shouldComponentUpdate to cut down on unnecessary renders.
Why and How to Use PureComponent in React
A look into what React.PureComponent is, how it works, and how it can be used to improve performance
React at 60FPS
A look at several useful techniques for benchmarking and improving React application performance
Optimizing the Performance of Your React Application
Covers several ways to improve perf, including profiling with the React Perf Addons, using correct keys for lists, and use of
Why Did This React Component Re-Render?
A reminder that passing a style object in
renderwill usually cause shallow-equality checks to fail, even if the style values are identical
React is Slow, React is Fast: Optimizing React Apps in Practice
A clear and informative explanation covering multiple aspects of performance, including use of the Chrome DevTools flame graph for visualizing perf, extracting components and implementing
shouldComponentUpdate, connecting to Redux, and use of Recompose and Reselect to improve performance.
Optimizing React Performance with Stateless Components
Shows the basics of using functional components, discusses why
shouldComponentUpdateis needed for perf improvements, and demonstrates use of
PureComponentand the Recompose library as other possible approaches.
Twitter Lite and High Performance React Progressive Web Apps at Scale
Excellent advice and information from the Twitter Lite dev team on how they optimized their app, including code splitting, ways to avoid "jank", optimizing React rendering, optimizing Redux usage, and more.
Optimizing React Rendering
Discusses several aspects of improving React rendering performance, including tips for ensuring your codebase is ready to use
PureComponent. Has a link to further discussion on HN. Part 2 describes how they built a library called
mutation-sentinelto detect accidental mutations, and Part 3 covers a Babel plugin for optimizing inline functions in render methods.
Describes a number of common perf issues in React apps, and how the react-wastage-monitor library can be used to detect them
Infinite List and React
A Twitter developer describes some of the challenges they faced in building a performant infinite scrolling list component
React Performance Anti-Pattern: Creating Functions in
Describes why creating functions inside of
render()is bad for perf, specifically in relation to optimization and prop reference comparisons, and offers several alternate patterns as solutions.
Memoize React components
Discusses the basic ideas of memoization, and shows how they can be applied to wrapping React components using the
moizelibrary (or other memoization libraries).
When to use Component or PureComponent
Good advice on the potential benefits of using
PureComponent, as well as several potential downsides or gotchas (such as binding functions in
The Virtual DOM and its Anti-Patterns
First in a 3-part series discussing causes of slow components and wasteful rendering. Later posts will cover ways to optimize Redux usage, and tools to find bottlenecks that can be optimized.
How to greatly improve your React app performance
Discusses React perf issues like bad
sCUimplementations, changing the DOM too fast, and event/callback usage, with possible solutions.
React Performance Fixes on Airbnb Listing Pages
Excellent practical discussion of actual perf issues that were showing up in Airbnb pages and how they resolved them. Covers performance recordings, handling initial renders, scrolling, only using component state for values that affect re-rendering, and more.
Debugging React Performance with React 16 and Chrome DevTools
Shows how to use the Chrome DevTools to profile React code using performance recordings, including analysis of recordings to track down perf issues.
Demystifying Memory Usage using ES6 React Classes
A quick look at the memory usage differences between calling
Function.bindand using the Class Properties syntax, and the readability tradeoffs involved.
How does React decide to re-render a component?
An easy-to-read overview of when and why a component will re-render.
Dragging React performance forward
A detailed look at how the react-beautiful-dnd library implemented performance improvements with drastically better results, including avoiding unnecessary renders and DOM reads, applying style updates, virtualizing movement, and using lookup tables.
Code Splitting and Progressive Apps
Also see Webpack Advanced Techniques
Progressive Web Apps with React
A multi-part series by Addy Osmani on building performant Progressive Web Apps, including page loading, code splitting, and offline handling.
Progressive loading for modern web applications via code splitting
Examples of how to set up code splitting, and write components that encapsulate the process for improved loading times.
Performance Optimizing a React Single Page App
A series of articles looking at various performance-related topics, including server rendering, asset optimization, code splitting, memoization, and immutable data.
Addy Osmani digs into the issues involved in parsing and compiling JS scripts on load, discusses how to measure performance, and gives advice for lower parse times.
Improving first load time of a Production React App
A detailed look at the various approaches used by UrbanClap to improve their load time, including file chunking, on-demand loading, dropping non-critical libraries, and more
Simple Pattern for Asynchronously Loading React Components
A quick example of using dynamic importing to lazy-load React components
React Progressive Web Apps
A pair of posts that cover how to set up an initial PWA and check its behavior against best practices, and how to add offline-first behavior to a React+Redux PWA.
What profiling my Universal React-Redux app revealed
Discusses using the Chrome DevTools to debug and do CPU profiling of a Node server process that was doing server-side rendering of a React app.
Performance-tuning a React application
An excellent case study on improving load time for a small React+Redux app. Describes use of gzipping, image cropping, lazy loading, and more.
A React and Preact Progressive Web App Performance Case Study: Treebo
An extensive technical deep dive into how Treebo optimized their React application for good performance on mobile devices.
Firebase + React: Optimizing for the Real World
Describes shrinking a React + Firebase app bundle from 1.7MB to 230KB by switching to smaller alternative packages and analyzing bundle size.
A Pinterest Progressive Web App Performance Case Study
A deep dive into how Pinterest optimized their new PWA app, including route chunking, use of babel-preset-env, service workers, and use of normalized Redux state.
Building Efficient UI with React and Redux
Builds a simple app using React, Redux, and Immutable.js, and looks at some of the most common misuses of React and how to avoid them.
"Comparing React to Vue for dynamic tabular data"
Good comments from an HN thread discussing a React vs Vue benchmark. A Discord developer talks about several lessons learned, including pros and cons of using Immutable.js, and only rendering elements that are visible.
Immutable.js: worth the cost?
Looks at several pros and cons of using Immutable.js, such as enforced immutability (pro), and major performance problems from calling
React + Redux performance optimization with shouldComponentUpdate
Discussion of proper Redux connection structure and use of Immutable's
toJS(), with links to further articles and discussions.
"React-Immutable-Mixin vs PureRenderMixin" - comment from Lee Byron
Immutable.js author Lee Byron comments on a performance discussion, giving advice on suggested Immutable.js usage patterns
"Immutable perf tip: avoid toJS"
Another suggestion from Lee Byron to avoid use of Immutable.js's data conversion functions based on performance reasons.
"Potential concerns with using Immutable.js"
A comment discussing a number of potential negative tradeoffs when using Immutable.js, including both performance anti-patterns and API issues
Persistent data structures and structural sharing: a reason to use Immutable.js
An excellent article that describes how Immutable.js's implementation can improve performance while updating large objects, with benchmarks. There's further good discussion on Reddit, and in the Twitter thread, Immutable.js author Lee Byron confirms that calling
toJS()is very expensive and should definitely not be used in a Redux
Should I use Immutable.js with Redux?
A well-written comparison of several pros and cons for using Immutable.js, including perf benefits, perf negatives, enforced immutability, and overhead of use.
"Performance of immutable data updates"
Some Reddit comments pointing out that there is always a cost to updating data immutably, but that it's worth considering that cost in the context of the application.
Practical Redux, Part 6: Connected Lists, Forms, and Performance
Discusses the key considerations for performance in Redux apps, with some examples and pointers to further information.
High Performance Redux
A detailed HTML slideshow that digs down into React Redux to show how
connect()'s optimizations work, and has interactive demos to show various approaches. (Note: the code-related slides advance using the down arrow to step through different lines of code - don't miss that info!)
How to optimize small updates to props of nested component?
Looks at how a normalized Redux state structure combined with multiple connected components can improve performance
Redux TodoMVC Pull #1: Optimization
An optimization pass for a Redux vs MobX benchmark, demonstrating several techniques
Redux Issue #1751: Performance issues with large collections
Discussion of several factors that affect Redux performance
Improving React and Redux Performance with Reselect
Covers how to use Reselect to define memoized "selector" functions that can cut down on duplicate work
Chat discussion - summary of Redux connection perf considerations
An overview of how having many connected components can improve performance
Chat discussion - single connected component vs many connected components
An extended chat log discussing pros and cons of various approaches to managing connected components in a Redux app
React Performance Debugging: The Magic of Reselect Selectors
Discussion of React perf topics, and how Reselect selector functions can improve perf for Redux apps
Refactoring Components for Redux Performance
Discusses common perf issues, methods for analyzing perf, and ways to structure Redux-connected container components to cut down on re-rendering.
React/Redux Performance Tuning Tips
A number of suggestions for improved performance with Redux
An artificial example where MobX really shines and Redux is not really suited
An excellent in-depth article that sets up a specific benchmark example, and compares the performance of a MobX implementation vs several different Redux-based implementations. There's valuable discussion in the Reddit comments, and Dan Abramov submitted a PR to the sample project that demonstrates some fairly simple changes that result in improved Redux performance.
Performance Optimizations in Redux's
Some quick tips on how to properly cache and memoize selectors for use in
Surprising polymorphism in React applications
A Chrome V8 engine developer digs into the nitty-gritty details of how common Redux reducer patterns result in less-optimized behavior from the JS engine running the code.
Redux isn't slow, you're just doing it wrong - an optimization guide for React-Redux
An excellent summary of the basic steps for good performance with React-Redux
Measuring performance gains - AngularJS to React (with Redux or MobX)
A highly detailed article that investigates and benchmarks performance between an Angular 1.x app and equivalent React+Redux and React+MobX apps in a variety of real-world use cases. Excellently written and researched.
The most unknown Redux performance trick
Examples of how
areStatesEqualoption can be used to skip unnecessary re-renders.
Optimizing Redux Components
Discusses Redux-specific perf optimizations, such as avoiding unnecessary work in
mapStatefunctions, memoization, and advanced comparison function options for
React + Redux Performance and the Benchmarks to Prove It
Describes an approach for benchmarking a React+Redux app to understand how much impact performance optimizations actually give.
Redux's Connect function and areStatesEqual Option
Looks at one of
connect's options that can be used to customize comparisons and skip unnecessary