Michał identifies time to interactive and dropped frames as the metrics with the strongest effect on user experience. Time to interactive usually refers to app startup, but teams can also measure how quickly a specific interaction completes. With variable refresh rates, Łukasz recommends tracking dropped frames rather than FPS.
React Native Performance Q&A
Speakers
Callstack host Łukasz and head of technology Michał answer audience questions about React Native performance, drawing on Q&As from their optimization guide tour in San Francisco, Los Angeles, and Detroit.
Michał says code splitting in React Native is usually more useful for scaling needs, such as super apps or teams working independently, than for user-facing performance. Hermes already maps bytecode so it can load needed code into memory; downloading large JSON files on demand is one potential performance benefit. For faster first renders, the hosts suggest deferring or prefetching data and moving expensive calculations out of render work.
Michał says there is no single performance monitoring tool for both development and production. He names Sentry and Firebase for runtime monitoring, Flashlight and Flipper integrations for development, and Shopify's React Native Performance library for instrumentation; the hosts also mention Reassure. They describe `freezeOnBlur` as a way to pause rendering for screens that are out of focus, and advise testing for side effects.
For breaking up work, Michał points to Reanimated worklets, the native driver in Animated, and InteractionManager for scheduling work after transitions. He recommends Animated for modest animation needs, Reanimated for more extensive animation work, and Rive or Lottie when a graphics team can support them. For app size analysis, he names React Native Bundle Visualizer or Source Map Explorer for JavaScript, Android Studio's APK Analyzer for Android, and Dependencies for Apple platform apps.
Michał recommends testing with Reassure or custom Appium code and monitoring real users through tools such as Sentry or Firebase. He says migrations to the new architecture can bring unexpected issues, including text rendering problems discussed around Shopify's FlashList. He advises against spending a year solely on performance, while describing a Dream11 project where three developers spent nearly two months optimizing about ten chat UI metrics and beat the native implementation on most of them.
Takeaways
- Track time to interactive and dropped frames to focus on user-visible performance.
- Move expensive calculations out of render work and defer or prefetch data where appropriate.
- Use separate tools for development feedback and production monitoring.
- Test `freezeOnBlur` in the app to catch side effects.
- Set performance goals and measure them continuously instead of postponing optimization until the end.
Mentioned in this talk
Search inside this talk
What was claimed 14
- builtCallstack Team built Re.Pack
“we also contribute to many open-source projects such as ... Re.Pack”
0:01inReact Native Developers Wanted!YouTube Verified7 sources· Talk
- role atMichał is head of technology at Callstack Team
“Michał, our head of technology.”
YouTube Unverified1 source· Talk
- uses
“React Navigation uses React Native Screens.”
4:16inNative Navigation in JavaScript WorldYouTube Verified3 sources· Talk
- featureReact Native: Hermes can use memory maps for bytecode bundles to load necessary code into device memory
“It has memory maps for your bytecode bundle and allows you to load only the necessary code into device memory.”
YouTube Unverified1 source· Talk
- featureExpo Router: Uses experimental Metro features for lazy code bundling
“It uses experimental Metro features for lazy code bundling.”
YouTube Unverified1 source· Talk
- featureReact Native Freeze: Freezes components in parts of an application and prevents them from rendering
“allows you to freeze components in parts of your application and prevent them from rendering.”
YouTube Unverified1 source· Talk
- integrates withReact Native Screens integrates with React Native Freeze
“This is used by React Native Screens.”
YouTube Unverified1 source· Talk
- featurefreezeOnBlur: Automatically freezes rendering for a screen when navigation blurs it
“It automatically integrates freezing, using React Suspense mechanisms to pause React rendering.”
YouTube Unverified1 source· Talk
- featureReanimated: UseWorklet can split JavaScript work across threads
“Reanimated has this useWorklet directive, which allows you to split JavaScript work between several different threads.”
YouTube Unverified1 source· Talk
- usesMichał uses
Hermes Agent
recommended for most cases“For now, a good bet is to use Hermes in most cases.”
YouTube Unverified1 source· Talk
- usesDream11 uses React Nativechat UI rewritten from native to React Native
“a chat UI they were rewriting from native to React Native.”
YouTube Unverified1 source· Talk
- featureAnimated API: Native driver supports animations
“use the Animated API with the native driver.”
YouTube Unverified1 source· Talk
- feature
Android Studio: Includes APK Analyzer for analyzing Android app bundles
“there’s a built-in tool called APK Analyzer in Android Studio.”
YouTube Unverified1 source· Talk
- featureDependencies: Visualizes native dependencies of iOS, tvOS, and watchOS apps
“You can visualize the native dependencies of your iOS, tvOS, or watchOS apps.”
YouTube Unverified1 source· Talk





