Mobile Application Performance Optimization
Ali Sincar
10 Ocak 2026
Mobile Application Performance Optimization
Mobile application performance is one of the most critical factors of user experience. A slow application leads to user loss and low ratings. In this guide, I'll share proven techniques to optimize your React Native and Flutter applications.
Reducing App Startup Time
Users expect your app to open quickly. The ideal startup time should be under 2 seconds.
For React Native
// Load modules with lazy loading
const HomeScreen = React.lazy(() => import('./screens/HomeScreen'));
const ProfileScreen = React.lazy(() => import('./screens/ProfileScreen'));
function App() {
return (
<Suspense fallback={<LoadingScreen />}>
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>
</NavigationContainer>
</Suspense>
);
}
For Flutter
// Use deferred loading
import 'package:flutter/material.dart';
import 'screens/home_screen.dart' deferred as home;
import 'screens/profile_screen.dart' deferred as profile;
class App extends StatelessWidget {
Future<void> _navigateToHome() async {
await home.loadLibrary();
Navigator.push(
context,
MaterialPageRoute(builder: (_) => home.HomeScreen()),
);
}
}
Memory Optimization
Memory leaks and excessive memory usage can cause your app to crash.
Best Practices
- Clean up unnecessary states
- Remove event listeners
- Use FlatList/ListView for large lists
- Optimize images
// React Native - useEffect cleanup
useEffect(() => {
const subscription = eventEmitter.addListener('event', handleEvent);
return () => {
// Cleanup
subscription.remove();
};
}, []);
// Image optimization
<Image
source={{ uri: imageUrl }}
resizeMode="cover"
style={{ width: 200, height: 200 }}
// Use cache
cache="force-cache"
/>
List Performance
Long lists are a common performance issue in mobile applications.
React Native FlatList Optimization
<FlatList
data={items}
renderItem={renderItem}
// Performance optimizations
removeClippedSubviews={true}
maxToRenderPerBatch={10}
updateCellsBatchingPeriod={50}
initialNumToRender={10}
windowSize={10}
// If item height is fixed
getItemLayout={(data, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
})}
// Unique key
keyExtractor={(item) => item.id}
/>
Flutter ListView Optimization
ListView.builder(
itemCount: items.length,
// Cache size
cacheExtent: 100,
itemBuilder: (context, index) {
return ListTile(
key: ValueKey(items[index].id),
title: Text(items[index].title),
);
},
)
Native Module Integration
Use native code for performance-critical operations.
React Native Native Module
// Android - Java
public class ImageProcessorModule extends ReactContextBaseJavaModule {
@ReactMethod
public void processImage(String imagePath, Promise promise) {
try {
// Heavy processing in native code
Bitmap processed = heavyImageProcessing(imagePath);
promise.resolve(processed);
} catch (Exception e) {
promise.reject("ERROR", e);
}
}
}
// iOS - Swift
@objc(ImageProcessorModule)
class ImageProcessorModule: NSObject {
@objc
func processImage(_ imagePath: String,
resolver: @escaping RCTPromiseResolveBlock,
rejecter: @escaping RCTPromiseRejectBlock) {
// Heavy processing in native code
let processed = heavyImageProcessing(imagePath)
resolver(processed)
}
}
Animation Performance
Target 60 FPS for smooth animations.
React Native Animated API
import { Animated } from 'react-native';
const fadeAnim = useRef(new Animated.Value(0)).current;
// Use native driver
Animated.timing(fadeAnim, {
toValue: 1,
duration: 300,
useNativeDriver: true, // Important!
}).start();
Flutter Animation
class AnimatedWidget extends StatefulWidget {
@override
_AnimatedWidgetState createState() => _AnimatedWidgetState();
}
class _AnimatedWidgetState extends State<AnimatedWidget>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(milliseconds: 300),
vsync: this,
);
}
@override
Widget build(BuildContext context) {
return FadeTransition(
opacity: _controller,
child: Container(),
);
}
}
Bundle Size Optimization
Reducing app size decreases download and update times.
React Native
# Use Hermes engine
# android/app/build.gradle
project.ext.react = [
enableHermes: true
]
# Code minification with ProGuard
# android/app/build.gradle
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
Flutter
# Release build optimizations
flutter build apk --release --split-per-abi
flutter build ios --release
Performance Monitoring
Continuous performance monitoring helps you detect issues early.
Firebase Performance Monitoring
import perf from '@react-native-firebase/perf';
// Custom trace
const trace = await perf().startTrace('custom_trace');
await performHeavyTask();
await trace.stop();
// HTTP request monitoring
const metric = await perf().newHttpMetric(url, 'GET');
await metric.start();
const response = await fetch(url);
await metric.setHttpResponseCode(response.status);
await metric.stop();
Conclusion
Mobile application performance is an ongoing process that requires constant attention. By applying these techniques, you can achieve:
- ✅ Faster startup times
- ✅ Lower memory usage
- ✅ Smooth animations
- ✅ Better user experience
Measure and optimize performance regularly!