3 Reasons Your Game is Slow (and what you can do about it)
You’ve finally done it. After all your effort and hard work, your mobile game is live. At last, gamers are going to experience with your creation. But then it happens. The user reviews start coming in, and they aren’t pretty. “This game loads too slow!” is a common complaint, but you don’t have any insight or metric to help determine WHY it’s slow.
Performance matters. A growing mountain of research and real-world experience tells us what you can probably already guess: mobile users are very impatient when it comes to performance, and you really only get one shot at a first impression.
But if your users say your game is slow, what next? What makes a mobile game load slow, and what can be done to fix the problem?
The first step is to understand some of the natural challenges you’re up against. Most mobile apps are still using TCP, one of the most commonly used internet protocols. While TCP is perfectly fine for wired networks that were created 30 years ago, it has serious limitations when used for mobile devices. TCP has three main drawbacks: It uses available network bandwidth inefficiently, it handles packet loss ineffectively, and lastly, it can’t handle a change of IP address properly. All of these are common issues on mobile networks and require a different, mobile-centric approach.
Beyond the limitations of TCP and uncontrollable mobile network conditions, there are other factors that can compromise a mobile game performance, which you can and should fix. Let’s take a look at some of the most common issues, and what you can do to avoid them.
1. Incorrectly Configured Caching
While caching can help speed up your app’s user experience, it needs to be properly configured in order to actually confer a benefit. In simple terms, content being cached comes with instructions for the server about how long a copy should be cached before it needs to be re-fetched from the origin server. For content that changes frequently, this should be an appropriately short value (the images for a weekend sale or similar event need only be cached for the length of the event, for example) while content that doesn’t change frequently should have a longer value.
Often, developers leave these values set as a default, or use the same, shorter time for all their content. This results in more round-trips overall to the origin server, which translates to more waiting for content for your users. You can find more detailed information on caching and how to configure it in this blog post.
2. Poor Performing SDKs
These days, the average Android application has 15 different SDKs installed. These SDKs are useful, providing valuable services like analytics, crash reporting, payment processing, and other important functions, but they can also have a big impact on application performance.
SDKs that make use of 3rd party services are a convenient way to add functionality to your game, but they leave your app relying on servers and services beyond your oversight or control. If a service is slow, or goes offline, it can lead to a poor experience for your users, who don't care if the problem is with your app or some 3rd party service used by your app. SDKs making multiple or frequent requests can mean more CPU time, and more time that the mobile device is transmitting and receiving data, which can impact not only performance and speed, but also battery life and your user’s data plans. Careful management of the SDKs installed in your application is an important part of ensuring your users have the best possible experience with your game.
One specific and common type of SDK - advertising network SDKs - come with their own specific sets of challenges. Many ad networks are also resellers, meaning you may not always know for sure where the ads in your game are coming from, or you may suddenly be serving ads from a new provider through the same network you’ve been using, leading to sudden shifts in performance. Ask your ad network provider what measures they’re taking to keep performance at a maximum, and if a network continues to affect your app’s speed then try removing their SDK or reducing its priority and seeing how it affects your overall game performance.
3. Inefficient Asset Handling
Another common pitfall affecting app performance is simply how much content the app is loading at a time. This can happen for a number of reasons. It might be loading content that isn’t displayed on the screen yet, or it might be loading images and resources that are poorly optimized for mobile devices. This happens when apps are requesting desktop-resolution images that are going to be scaled down in the UI anyway, for example. With so many different devices and the myriad of screen sizes that comes with them, it’s important to make sure that you’re serving images that are an appropriate size for the screens that will be displaying them. There are a number of services and solutions that can handle this for you, but it’s important to make sure they are configured correctly, and that your solution isn’t handling the resizing on-device.
Most Importantly, Know Your App
Now that we know some of the causes for game slow load times, we’re back to the question: how can you detect the performance issues and troubleshoot them in real-time, before they affect your app’s user experience? One way to easily gain insight into your mobile app behavior is to utilize a Mobile Application Performance Monitoring (APM) tool. There are a lot of options available, but here, too, it’s essential to utilize a mobile-first APM and look for one that offers alerts and basic control features. Knowing how your app behaves in real-time, what url’s are causing errors, and how to prioritize them better is one of the best ways to start getting a handle on your app’s performance. It will also help you find out about problems faster, before you start hearing about them in negative app store reviews.