Game performance

Monitoring and improving your game performance

Once your game is live, it's important to keep monitoring key metrics with Facebook Analytics. Keeping a close eye on your metrics will help inform your feature design, give you insights about your audience, and validate that your updates are keeping your game on the right track.

In Facebook Analytics many events and pieces of demographic information are logged automatically, and in addition you can log Custom App Events with FBInstant.logEvent(). So even if you don't log any custom events, you can check Analytics to get aggregated and anonymous information about your audience (e.g. age groups, country, languages spoken). You can also see engagement information such as retention, active users, etc.

Thanks to a functionality in the Web Hosting section, you can distribute your game package to a subset of your audience and follow closely data changes to validate that your game updates are improving your metrics.

Optimizing for Instant Games

Building games for Instant Games requires that you build your game in HTML5. Here's a list of Best Practices while developing your Instant Game.

Load times and performance

Initial loading shouldn't take more than 5 seconds: Instant Games need to be "instant", and players will tend to churn away if the initial loading takes too long. The total size of your bundle can be up to 200MB, but we'll only load the files explicitly required by your index.html during initial loading. So make sure to use that time to only load essential assets for the first session and postpone loading of other assets for when they are needed.

Report initial loading progress: During initial loading, you should inform us on your loading progress by using setProgress.

Avoid secondary loading screens: Once the native loading ring shows completion at 100%, the player shouldn't be thrown into another waiting experience - they should be able to play right away.

Optimize for desktop: You can have a different orientation for desktop browser by using the override_web_orientation in the bundle config. This will allow you to make good use of all web estate.

Optimize for mobile: Although Instant Games works on desktop browsers, it's a good idea to optimize rendering and aspect ratio for popular iOS and Android devices.

Load resources in parallel with initializeAsync: You shouldn't wait for the initializeAsync promise to resolve before downloading your resources. You can download in parallel.

Consider code minification and/or uglification: You can reduce download size and memory requirements for code assets significantly and the obfuscation applied to the code in the process makes more difficult to cheat or steal your game code.

First time player experience

Allow seasoned players to come back to the tutorial if they choose to. It can be that they haven't played the game in a while, or that they want to show the tutorial to a friend. Take note not to force the tutorial in every session, but give experienced players the opportunity to jump right into play.

Consider group settings for new players who join the group later. You should ensure that these players see the tutorial on their first play.

Use playable tutorials over text if possible. The best tutorials are those that users do not know are tutorials.

Recurring player experience

The tutorial should be accessible for new players and seasoned players, but it should be easy to skip.

Consider to integrate Home Screen shortcut: prompt users to add a shortcut to your games to increase long term retention by creating an additional persistent entry point.


Localize your game: players tend to engage more with the game if they can play in a language that's natural to them. The table below will help you decide which languages to translate your game content to:

Ranking Languages Priority

Top 10 Languages

EN (English), ES (Spanish), PT (Portuguese), FR (French), AR (Arabic), ID (Indonesian), VI (Vietnamese), TH (Thai), PL (Polish), DE (German)

Must have

Next Top 10 Languages

IT (Italian), ZH (Chinese), RU (Russian), TR (Turkish), MY (Burmese), MS (Malay), RO (Romanian), NL (Dutch), SV (Swedish)

Nice to have