All Projects → doomsower → react-native-startup-time

doomsower / react-native-startup-time

Licence: MIT license
measure startup time of your react-native app

Programming Languages

java
68154 projects - #9 most used programming language
objective c
16641 projects - #2 most used programming language
javascript
184084 projects - #8 most used programming language
ruby
36898 projects - #4 most used programming language
Starlark
911 projects

Projects that are alternatives of or similar to react-native-startup-time

Java Debug Tool
Java dynamic debug tool
Stars: ✭ 26 (-70.45%)
Mutual labels:  debug, profiling
perforator
Record "perf" performance metrics for individual functions/regions of an ELF binary.
Stars: ✭ 33 (-62.5%)
Mutual labels:  benchmark, profiling
Vim Startuptime
⏲️ A Vim plugin for profiling Vim's startup time.
Stars: ✭ 108 (+22.73%)
Mutual labels:  startup, profiling
gl-bench
⏱ WebGL performance monitor with CPU/GPU load.
Stars: ✭ 146 (+65.91%)
Mutual labels:  benchmark, profiling
Jsbench Me
jsbench.me - JavaScript performance benchmarking playground
Stars: ✭ 50 (-43.18%)
Mutual labels:  benchmark, profiling
Profiling
Was an interactive continuous Python profiler.
Stars: ✭ 2,989 (+3296.59%)
Mutual labels:  debug, profiling
graphql-benchmarks
GraphQL benchmarks using the-benchmarker framework.
Stars: ✭ 54 (-38.64%)
Mutual labels:  benchmark, measurement
kokkos-tools
Kokkos C++ Performance Portability Programming EcoSystem: Profiling and Debugging Tools
Stars: ✭ 52 (-40.91%)
Mutual labels:  debug, profiling
Web Frameworks
Which is the fastest web framework?
Stars: ✭ 6,125 (+6860.23%)
Mutual labels:  benchmark, measurement
perf
Linux Perf subsystem bindings for Go
Stars: ✭ 19 (-78.41%)
Mutual labels:  benchmark, profiling
criterion
statistics-driven micro-benchmarking framework
Stars: ✭ 17 (-80.68%)
Mutual labels:  benchmark, measurement
Phoronix Test Suite
The Phoronix Test Suite open-source, cross-platform automated testing/benchmarking software.
Stars: ✭ 1,339 (+1421.59%)
Mutual labels:  benchmark, profiling
Karma Benchmark
A Karma plugin to run Benchmark.js over multiple browsers with CI compatible output.
Stars: ✭ 88 (+0%)
Mutual labels:  benchmark, profiling
fastapi-debug-toolbar
A debug toolbar for FastAPI.
Stars: ✭ 90 (+2.27%)
Mutual labels:  debug, profiling
awesome-startup-stack
Curated list of technologies for your next startup
Stars: ✭ 32 (-63.64%)
Mutual labels:  startup
xdebug
Enables Xdebug for CLI PHP scripts on demand
Stars: ✭ 12 (-86.36%)
Mutual labels:  debug
Mzeis ServerTiming
Sends profiling information as a Server Timing HTTP header to the browser
Stars: ✭ 26 (-70.45%)
Mutual labels:  profiling
DiscEval
Discourse Based Evaluation of Language Understanding
Stars: ✭ 18 (-79.55%)
Mutual labels:  benchmark
playwright-test
Run unit tests with several runners or benchmark inside real browsers with playwright.
Stars: ✭ 81 (-7.95%)
Mutual labels:  benchmark
php-orm-benchmark
The benchmark to compare performance of PHP ORM solutions.
Stars: ✭ 82 (-6.82%)
Mutual labels:  benchmark

react-native-startup-time

This module helps you to measure your app launch time. It is measured from the earliest point in time available to the native module, that is the module's initialization. When getTimeSinceStartup is called on JS side, you'll get a promise which resolves with difference between these two moments in ms. This is not very accurate, but should give you good enough base for further optimizations.

On iOS time measurement is based on this article. On Android SystemClock.uptimeMills is used.

As far as I know, there's no way to programmatically obtain time passed since the moment when user taps on app icon. For this you have to use native dev tools. On Android this module will call reportFullyDrawn so you can inspect adb logs.

If you know a better way to measure startup time (in a module), let me know or better shoot a PR.

Getting started

$ yarn add react-native-startup-time

Mostly automatic installation

This module supports autolinking so if you use RN 0.60+ then no additional action is required.

Otherwise, run

$ react-native link react-native-startup-time

Manual linking installation

Show manual installation steps
  1. Open ./android/settings.gradle, add this:
include ':react-native-startup-time'
project(':react-native-startup-time').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-startup-time/android')
  1. Open ./android/app/build.gradle, add this:
implementation project(':react-native-startup-time')
  1. In MainApplication.java, add this:
// Import
import com.github.doomsower.RNStartupTimePackage;

// Define package
new RNStartupTimePackage()

Usage

Render startup time badge somewhere on your first screen:

import { StartupTime } from 'react-native-startup-time';

<StartupTime
  ready={true /* optional, defaults to true */}
  style={styles.startupTime /* optional*/}
/>

Or use imperative call:

import { getTimeSinceStartup } from 'react-native-startup-time';

// when you app is ready:
getTimeSinceStartup().then((time) => {
  console.log(`Time since startup: ${time} ms`);
});

The following sections are applicable to Android only

Single-Sampling

This makes sure Android doesn't resolve the getTimeSinceStartup promise more than once per app execution. More information in PR #10.

Since v1.4.0 this strategy is enabled by default, if you're migrating from a previous version and you just want things to keep working as they are, follow the steps below.

Disabling Single-Sampling:

Be aware, depending on which lifecycle hook you've attached your call to getTimeSinceStartup() you might receive redundant invocations, e.g. when the app is brought from bg to fg. Because the app isn't really starting up, the measured time can be unrealistic; such unrealistic samples adulterate your data.

To disable single-sampling strategy, create your package using constructor with parameter false:

// Define package
new RNStartupTimePackage(false)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].