List down some of the steps to optimize the application.

* Use Proguard to minimize the application size.(It does this by stripping parts of the React Native Java bytecode (and its dependencies) that your app is not using)

* Create reduced-sized APK files for specific CPU architectures. When you do that, your app users will automatically get the relevant APK file for their specific phone’s architecture. This eliminates the need to keep JSCore binaries that support multiple architectures and consequently reduces the app size.

* Compress images and other graphic elements. Another option to reduce image size is using file types like APNG in place of PNG files.

* Don’t store raw JSON data,  eIther we need to Compress it or convert it into static object IDs.

* Optimize native libraries.

* Optimize the number of state operations and remember to use pure and memoized components when needed

* Use Global State wisely for example worst-case scenario is when state change of single control like TextInput or CheckBox propagates render of the whole application. Use libraries like Redux or Overmind.js to handle your state management in a more optimized way.

* Use key attribute on list items, it helps React Native to pick which list to update when rendering a long list of data

* Use VirtualizedList, FlatList, and SectionList for large data sets.

* Clear all the active timers which may lead to heavy memory leakage issues.