
Success of a mobile application is half achieved when a great idea is put together to create a powerful application. The second half is accomplished when it delivers the desired user experience without slowing down. To make sure the application performs at par, it is recommended to identify the reason for slow application and fix them. Now, let’s see how you can optimise these mobile app performance metrics to make your application faster in simple, easy to follow steps.
Prefer native development over hybrid: Native apps have more performance: The advantage of choosing a native app is that it is the fastest and most reliable when it comes to user experience. Native apps are built using an operating system's SDKs and can also interact with all of the device features, such as the microphone, camera, GPS, device storage, etc.
Prefer swift over objective c: Performance wise, swift language is 2.5 times more faster than objective C. Also latest released versions of swift language is more stable than initial versions.
Minimise the Application Size: Mobile phones aren’t powerful GPUs, yet! Also, do you know that most of the Android market share is consumed by low-end configuration mobile phones? Some of them don’t even support 2G or 3G, even downloading your huge application in a moment need would be a nightmare for the app’s users. The less your app consumes space on such constrained phones, the better.
Optimise Networking:
Text first, image second: To optimise networking, try to load textual data first. Image-based content present in your application can then be loaded as the second preference, asynchronously.
Avoid duplicate network requests: Duplicated requests increase system congestion and decrease the app’s performance, especially when you have a million app users. Imagine increasing the number of requests to your server increased by 2 folds when you are extremely desperate to optimise these costs.
Understand and adjust based on connection quality: Think about an app that adjusts everything based upon the network quality available. Your app can change the content quality delivered based upon what network conditions a user is present in to make sure that the app’s usage doesn’t fall through.
Effective API design: The way an API has been designed has a huge impact on how it impacts the app’s performances. An incomplete or lazily designed API can be a burden on the mobile application. Workarounds on APIs usually put too much pressure on the network limitations. Starting from UI and going all the way to data can be one great way to design a consistent and complete API payload that improves your app’s performance. Just because you can send, don’t send everything from mobile to your API. Only send what’s required. When designing the API payloads of your mobile app ensure that you have:
Consistency: The developer should know that expect, leaving no space for least astonishment.
Completeness: Having reduced workarounds
Optimise Images for High Mobile App Performance: To optimise images in your application, you can:
Use vector images
Serve dynamic image sizes
Apply colour filters as opposed to using different sets of coloured images
Use image caching
Use libraries like Picasso and Fresco
Cache Data to Optimise for Offline Mode: When your network is weak, display whatever data you have, while fetching required data. If you don’t have a testing team at your disposal, try switching your phone into the airplane mode and test your app for offline performance.
Optimising Screen Size for High Mobile App Performance: A lot has been spoken about the screen sizes, Android raises some really big concerns here as there are literally thousands of devices, each with their own resolution and screen size. Don’t have a 100’s of devices to test the screen size and resolution? Test with emulator configurations. As a rule of thumb:
Build for small and medium screens
Optimise for MDPI and HDPI
Implement adaptive UI flows
Memory Usage: In order to provide mobile users with the ability to multitask, Android sets limits to how much RAM is available to an application. These limits are not static and change as mobile usage increases or decreases. Considering RAM limitations throughout app development, and apps that are running in the background can hog unnecessary resources. But, you can optimise your app by:
Limiting the lifespan of services, consider using intent service to limit the lifespan
Release UI resources when users move to a different UI
Utilise memory efficient code constructs
Minimise the use of external libraries
Minimise app launch delay: Do you know that for the average top 25 apps on PlayStore, the launch time goes anywhere from 800ms to 4.5s? Now, 4.5s is way too much for most use cases. Bottom line, apps need to start quickly!
To optimise your Mobile App Performance (iOS) , you should consider the following for decreasing launch time:
Embed fewer dylibs
Consolidate Objective-C classes
Eliminate static initialisers
Use more Swift, Apple recommends
Measure your efforts using DYLD_PRINT_STATISTICS
Discourage the usage of dlopen()
On Android, the following usually impacts the app launch time:
Instantiation of many views
Expensive content like decoding bitmaps
Running layouts
To make your app launch faster on Android:
Don’t inflate parts of UI that you don’t require on the first launch. Use placeholder for hierarchies that can be optionally inflated later
Avoid memory churns due to allocation and garbage collections whenever possible
Use tools like Apteligent to monitor and optimise your app launch time
Avoid initialisation code in your app’s object
Remember, an app that has been launched recently, and an app that is launching for the first time will behave differently
Minimise Device Wake-ups affects Mobile App Performance: Waking up mobile too often drastically decreases system performance. It also drains system resources. You can restrict the intents to which your app will respond.
Smooth Frame Rate: On both iOS and Android, when it comes to rendering animations and gestures the maximum frame rate is 60fps. Anything that goes below a 60fps usually will appear as a hiccup to your app’s user. In order to hit the 16ms frame rate ( an equivalent of 60fps), everything within your app’s rendering code has to be executed within 16ms.
This is where on Android you would start to notice how expensive a 5ms from a garbage collection becomes. Let’s evaluate how this will impact the end user. When you miss the 16ms limit, you often get a slightly lower frame rate ~ 59fps. No big deal here, right? Wrong!
What actually happens is that if your app misses the 16ms limit once, it is unable to use the window for one frame and now has to wait for the next one. Though your app only took 19ms to render, it actually missed the window, which will appear to the user that now it’s taking TWICE as long. You see! Right there, you just told a user that your app is super bad.
Restoring User Data on New Devices: App users often spend a lot of time setting up the application and make it work as they intend to on their phones. When they re-install an app, then most users expect their old settings to re-surface.
Preserving settings data can help enhance the quality of your application by:
Any setting modified by the user
Push notification settings
Whether the user has seen the welcome screens and introductory on-boarding screens
Find Latency Killers: It is very important to remove latency issues from your application. Latency is known to cause app errors and often crashes the entire application. Statistics have told us that if an app runs slowly, more than 50% users will uninstall your app within 24 hours.
To effectively deal with latency related issues:
You can restrict third-party latency sources when your network quality is poor
Reduce the need for latency killer APIs that you might be using on your mobile
Optimising your App for Multitasking: Use below steps to optimise your app for multitasking:
You can use instruments to identify and fix bugs
Prioritise your work appropriately and don’t block the main thread
Identify and manage your working set
Use caches and respond to memory warnings
Leveraging the virtual memory system to increase reclaimable memory
Make tradeoffs
If someone can even follow 50% of these, they will observe a tremendous amount of difference in how their app will perform.
Cut down on features that are not essential for app performance: Superfluous features may make the app look prettier, but they become a burden on performance. A large amount of features, especially ones that are necessary for the app to function, slows down the app. Removing the unnecessary weight and honing the features that are integral to the app enhances speed, responsiveness, and overall performance.
Choose UI & functional control wisely: To develop any particular feature, there may be multiple controls available in language/SDK. If developer fails to peak right control for that feature, then consequences may hamper performances of the app. Therefore selecting most appropriate control is important from performance perspective.
Prefer lighter & faster database uses in case that network connection drops: Any mobile apps, nowadays needs local database to store app data. There are more than 7-8 ways to store this data locally. But for bigger data suitable data storage options are SQLite, Core data, Realm, room, etc. Realm, room are the new faster & more powerful database emerging in recent time.
Take Away!
Coming to the end, it is worth considering that the world has become mobile first and the number of the connected device is growing at an exponential rate. At the same time, the user attention span is getting shorter. The only way to retain them is a high mobile app performance.
The customer’s first experience with your app is the most important thing to consider. Most users, when confronted with a slow, unresponsive app, tend to uninstall it not long after. Keep your first impressions in the green with an effective, customer experience-focused app. With proper management of resources and features, a mobile app can prove to be an invaluable asset for your organisation.
Make sure you follow these best practices while working on your app development services. This can be a key to pave a way for user retention and user acquisition which eventually will lead to benchmarking breaking apps. Seems like we are missing something? Please comment or get in touch.