アプリの実行速度を向上させる最適化ガイド(1)

1.はじめに

われわれのゲームはなぜこんなにもロード時間が長いのでしょうか?
ライバル会社のゲームはエフェクトも華やかで音響効果もよいのに、なぜ早いのでしょうか?

【ごっつ三国 関西戦記】

昨年の測定記録24秒と比較したところ、約3秒改善され、21秒と測定されました。
入場ボタンをタッチしてからゲーム画面に進入した時間は、27秒でした。

下のグラフを見ると、同ジャンルで似たようなゲームであっても、実行時間に差異があることがわかります。
※対象ゲームは、2018年3月末にGoogle PlayとApp Annieの売上上位タイトルを無作為に選択したもの

2.インタビュー

ゲームをジャンル別に整理して、性能検査やゲームへの進入までの時間を測定し、テストした結果、NHN Entertainmentと子会社(以下、NE)のゲームのうち、いくつかは実行時間がとりわけ早いことを確認しました。他社製のゲームでは、実行段階別にログを取得する水準でテストできないため、NEゲームを対象にテストを行いました。

2.1まずは「ハンゲームスロット」だ

カジノのジャンルに分類された国内外のゲーム6種の実行時間の平均は10.41秒でした。
ハンゲームのカジノは測定時4.24秒で、平均より約6秒も速くゲームに進入できました。(2017年上半期の測定結果)
他社製のゲームではベンチマークテストではありませんが、数回テストを行い、平均値を測定しました。
秒単位で録画画面を見ながら時間を記録したもので、実行時の記録は概ね同じでした。

  • 測定ログを見ると、2個所、並列処理の部分がありました。
    • Hangame Smart Plaform SDKの初期化とFacebook SDKの初期化部分
    • ログインタイプ選択とゲーム情報のロード部分
  • 設定値の処理

ゲーム内の流動的な設定値は、初期化する際とログインの前後にプラットフォームとゲームサーバーから受信しています。
主にメンテナンスなどで、サービスの状態情報、Assetバージョン情報などを受信し、場合によってはゲームサーバー群の構成を変更したり、その情報を更新したりします。
サーバーアドレスが変わる場合は、サービス中ではほとんど発生せず、数日から数週間単位の周期でメンテナンスをするでしょう。Asset bundleはサービス状況に応じて、1日に何度もパッチする可能性がありますが、通常はメンテナンス周期と同様に行われます。設定値を受け取る部分はリトライもでき、保存された既存の設定情報を利用することもできます。
プレイタイム中、既存の設定値が切り替わる場合はほとんどなく、何らかの理由で設定値を受け取れなかった場合は、既に保存されている値を使用するように処理しました。
再受信の時間も、場合によってはリソースの浪費となるからです。
ゲームの構造的な部分とサービスの性質を見て決定する部分でもあります。
一度アプリを実行して設定値を受信できなかった場合は、ロジックから再実行しても解決されないことが多いでしょう。

  • Asset bundle処理

「ハンゲームスロット」のAsset bundleのダウンロード処理について紹介します。
ゲームごとにAsset bundleを使用する目的と方法が異なるので「これが答えだ」というものはありません。但しこのようなわずかな方法でも、ゲームの実行速度を上げるヒントになることもあるでしょう。「ハンゲームスロット」に提供されているゲームモードはたくさんあります。
ダンジョンを1つ1つクリアして進行するRPGゲームの「マップ」や「ダンジョン」と似たような概念で捉えてもよいでしょう。

【ハンゲームスロット】

2.2ハンゲームカジノはこうした

  • Asset bundleを使用しない

Asset bundleを使用していないので、リソースチェックとダウンロード時間が「ありません」。
但しレベルアップなどで特定の条件を達成すると、追加のゲームが公開され、ユーザーがそれをダウンロードしてインストールします。
ログイン時はログイン以外の処理がほとんどなく、マーケット別に商品リストを別々に受信することで情報をスリム化しました。

テクスチャサイズ1024以下、画像圧縮、イメージの再利用/共同使用など、テクスチャの最適化を行いました。
ロビー接続時に、過度に生成されていたプレハブ(主にポップアップ)なども除去しました。【ハンゲームカジノ】

2.3遅いゲームの遅延事例

遅延の事例を見てみよう。

  • イベントポップアップ
    実際の影響は微々たるものですが、ゲームを実行する際、イベントポップアップがたくさん起動し、ゲーム実行画面まで進入することで時間を浪費します。
    アプリの実行時間を測定するのに、ポップアップ1つにつき1秒で計算したところ、しばしば何百KBを超えるサイズがありました。モバイル環境であることを勘案してサイズ調整が必要でしょう。
  • 他システム連動のプロモーション
    クロスプロモーションのために、他システム、他ゲームと連動する場合があります。実際にクロスプロモーションによって実行時間が遅延するかテストしていませんが、影響を及ぼすことがあると仮定します。
    またユーザーの立場では、インゲームまでに5~6個のイベントウィンドウがあると、ゲームまで行きたいという気持ちがなくなる傾向があります。
  • Asset bundleデータ
    実行速度が速いアプリでAsset bundleを使わないことと対照的に、Asset bundleを「多く」使用する場合に該当します。
    アプリを実行するのに、Assetダウンロードとリソースチェックが大部分の時間を占めます。
    下記の測定結果から、Assetのダウンロードだけでなく、リソースチェックでも多くの時間を要することが分かります。下記は何百MB以上のAssetをダウンロードするゲームアプリです。
  • Aゲーム
    Asset bundleのダウンロードとリソースチェック:「ゲームの基本情報ファイルの読込」の部分

  • Bゲーム
    Asset bundleのダウンロードとリソースチェック:「リソースの変更履歴確認」の部分

ジャンル別にゲームの実行時間が異なる、差異があることについては、ゲームの特性も考慮する必要があります。
同一/類似カテゴリに分類されていてもゲーム固有のコンテンツやゲームのサイズなどによっても違いがあるでしょう。
DOOM II(1994年)とDOOM(2016年)が違うようにです。

しかしユーザーの立場では、似たようなゲームの中で、一方は快適に実行されるのに、もう一方はいくら待っても起動されないということになります。
どうすればアプリの実行時間を向上できるか、2部では最適化の方法について調べてみよう。

TOAST Meetup 編集部

TOASTの技術ナレッジやお得なイベント情報を発信していきます
pagetop