Skip to content

margelo/react-native-release-profiler

Repository files navigation

react-native-release-profiler

A fast and simple library to passively profile JS/Hermes performance in production and release builds.

Why

Usually performance issues are profiled in debug builds, which could lead to false positives (e.g. JS Garbage Collectors, Hermes-specific debug markers, or other LLDB hangs).

react-native-release-profiler allows you to profile your app in release builds, both in a local environment to profile specific issues, as well as in a production environment to spot regressions or collect performance samples from a wider variety of user devices.

Need help?

If you're having performance problems in your app, feel free to reach out to us at hello@margelo.io. We do this a lot. 😉

Installation

yarn add react-native-release-profiler
cd ios && pod install

Usage

  1. Install react-native-release-profiler
  2. Build your app in release mode
  3. Start a profiling session:
    import { startProfiling } from 'react-native-release-profiler'
    
    startProfiling()
  4. Stop the profiling session:
    import { stopProfiling } from 'react-native-release-profiler'
    
    // `true` to save the trace to the phone's downloads folder, `false` otherwise
    const path = await stopProfiling(true)
  5. Download and process the performance trace from your phone to your PC:
    • On Android:
      npx react-native-release-profiler --fromDownload --appId <your appId>
      
    • On iOS:
      npx react-native-release-profiler --local <path to profile>
      
  6. Open the performance trace in your tool of choice:

API

startProfiling(): void

Synchronously starts the Hermes Profiling Session.

stopProfiling(saveInDownloadsDirectory: boolean): Promise<string>

Asynchronously stops the Hermes Profiling Session, and saves the file in a cache or downloads directory if saveInDownloadsDirectory is true.

Returns the path of the saved profile.

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT