Performance Optimizations

Within this blog entry I will enlist some of the simple optimizations that one can do within actionscript 3 and particularly iOS mobile applications

1) No modifications to display list within timer events

In case you have a timer event firing at a very high rate and your application is making changes to the display list within this event handler. Consider that the fps of your application is lesser than the rate at which your timer is firing. In such a case you will be making changes to the display list which will never be actually used and you will be making unnecessary calculations within these timer events slowing down the player.

Instead the recommendation in such a case is to use stage.invalidate() call and use the RENDER event. In case you have a very deep display list, do not commit changes directly to the display list instead hold the changes in temporary variable and once you feel that sufficient changes have been made to the display list, then call stage.invalidate(). This will cause a RENDER event to get fired. One should use this event to make changes to the display list from the temporary variables which were holding these changes.

2) Keep constructors small

Constructor code is not JIT and is interpreted because of which it runs slow. Avoid having large constructors. In case of iOS however constructors are AOT (Ahead of time) compiled so this issue makes no difference for iOS.

3) Image handling

As a general rule of thumb, avoid embedding images and load them only on runtime when needed. Loading images at runtime results in a little more complicated code but if start up time is the requirement then definitely go for loading images at runtime rather then embedding them as part of swf.

4) Image formats

This is a general guidance and not related to actionscript 3. In case you are using a small image (lets say something around 10 x 10 image) then one should a png image. If the image is that of a face or something that has a lot of textures then definitely use jpg images. Obviously, if you need transparency in your images then you have no choice but to use png images.

5) Image sizes

It is important to use right sized images when making mobile applications. Working with large image sizes can be catastrophic to fps. If your rendermode is gpu and if you are using a mac then make sure that you check gpu utilization. This is provided by the open gl es driver tool in instruments. If the shader utilizations are coming in at 100%, then take it is as a hint to reduce image sizes.

Do visit http://help.adobe.com/en_US/as3/mobile/flashplatform_optimizing_content.pdf for similar optimizations you can do for your applications

3 Responses to Performance Optimizations

  1. Scott Enders says:

    Doesn’t the updateAfterEvent() method update the display list in a timer event?

  2. Kshitiz Gupta says:

    I am glad that you asked this. On desktop player version updateAfterEvent causes the results to be blitted to screen immediately. However, on iOS all the updates are queued whether they are from EnterFrame, updateAfterEvent or elsewhere and just updated once per frame.

  3. Pingback: Performance Optimizations « AIR-o-Dynamics « eaflash