本日は,1月30日後半の「Adobe Max Japan 2009」のレポートをお届けします。
ActionScript 3.0におけるパフォーマンス向上のヒント
野中文雄氏は,今日まで精力的に数多くのセミナー・講演を行い,著書も多数執筆されている,講師として非常に著名な方である。野中氏のセッションでは,「ActionScript3.0におけるパフォーマンス向上のヒント」と題し,ActionScript3.0をコーディングする上での注意点を述べた。その一部をご紹介しよう。
型指定
まず一つめのヒントとして型指定を指摘した。野中氏によると,「このセッションで,もっとも大切だったことは何かといわれればこの型指定であると答える」という。
ActionScriptには強い参照と弱い参照があり,型指定がされていない物,配列参照をしていないものは弱い参照となり,型指定をしている強い参照よりもアクセスが遅くなると言及した。なお,オブジェクトでは型指定ができないためクラスを使うのが賢明であるとのこと。
型指定を使用した変数を使用することも推奨された。たとえば配列などをfor文で処理する場合のlengthをローカル変数に代入することが挙げられた。これによって「強い参照が得られるだけでなく,直接配列のlengthを参照するよりも処理が軽い」とし,また,「for文が用いられるカウンター等の整数値を必要とする変数のように,変数型をintまたはuintのいわゆる整数型を使用することで,Number(浮動小数点を含む数値)よりも処理を早くすることが可能だ」と述べた。したがって,必要のない場合にはNumberは使用しないことが奨められた。
次に,TextFieldインスタンスに文字を加える場合の注意もあり,加算後代入演算子(+=)ではなく,TextField.appendText()を使用することが語られた。
条件判定
条件判定(ifステートメントによる条件文)の順番についても言及があった。一つのifの中に||(OR演算子)を用いて複数の条件処理を一つにまとめて行うのは余計な処理を増やす原因になるとして,else ifステートメント,elseステートメントを用い,例外から(もっともtrueとなるものが少ないと思われるもの)条件定義していくことが推奨された。
visibleとalphaとremoveChild()
描画されているオブジェクトをステージから排除する場合の処理として,alphaは推奨できないとしたうえで,3つの方法を比較した。
表1 オブジェクトを描画しないようにする,3つの方法
| 操作・機能/手法 | visible | alpha | removeChild() |
|---|---|---|---|
| 描画負荷 | なし | 少しあり | なし |
| 再表示 | 簡単 | 簡単 | 面倒 |
| サイズの情報 | 残る | 残る | 残らない |
| マウスイベント | 受け取らない | 受け取る | 受け取らない |
| 表示リスト内のインスタンス | 存在する | 存在する | 存在しない |
まとめとして,「visibleは表示・非表示を簡単に切り替えたい場合に有効だとし,alphaは表面上は見えないが描画されているため負荷がかかっているため非推奨(透明ボタンには,hitAreaとvisibleを応用することで代替できるためalphaを使う必要はない)」と述べた。removeChild()に関しては,該当のオブジェクトを当分あるいは永久に使わないときに有効だとした。
ArrayとVector
野中氏は「配列エレメントには型指定ができないため,取り出したエレメントはいったん型指定された変数に代入することが有効で,強い参照のメリットを得ることができる」と述べた。さらに,配列は連番のほうがアクセスしやすく,飛び飛びの配列はアクセスが遅くなるとしている。
Vectorクラスについても言及している。配列と似ているとしながらも,型指定ができるとし,Arrayとは違いエレメントは密(連番)にしなければならないと解説をしたうえで,「Flash Player 10ではVectorを使用したほうがよい」と述べた。
野中氏のセッションでは,実用的なパフォーマンス上昇のコツが濃密にレクチャーされた。野中氏によれば,今回のサンプルデータや資料は,FumioNonaka.comで公開するとしている。最後に,野中氏は,「CS4のリファレンスでは,オンラインとなり,ユーザーがコメントを付加することができるようになった。これによって最新の情報にアクセスできるようになったため,是非活用して欲しい」と述べた。

