akihiro kamijo さんのブログにFlash最適化ネタが連続投稿されてました。
Flash コンテンツパフォーマンス最適化 (メモリ編 1)
Flash コンテンツパフォーマンス最適化 (メモリ編 2)
Flash コンテンツパフォーマンス最適化 (CPU 編)
Adobe Flash Platform : Optimizing Performance for the Flash Platform
の翻訳・要約ですが、分かりやすく書かれています。
Flash最適化を心がけるとメモリーリークに悩まされることも少なくなるはず。
書かれている中のひとつ、Object pooling は昨年のFITCでGrant Skinner先生が言ってたしこのあいだのFlash Campでもあったなぁ。
インスタンスは使い回す、が大切なんだ。
Array
よりもメモリー消費が少ないVector
でPoolすると良いらしい。
Vector
はサイズ(length)を決めて作るとより効果的。
Vector class versus Array class
原文はPDFも用意されているのでダウンロードして大切にします。
忘れないうちにメモっとく。
ミップマップ
Flash コンテンツパフォーマンス最適化 (メモリ編 2)の”ダイレクトミップマッピング”の項
kamijoさんの別記事:Flash Player の Mip マップサポートについて
ActionScript Help:ミップマッピングの利用
2 次元イメージの場合は、ビットマップサイズを 4 または 8 で割り切れるサイズにし(例えば 640 x 128 では、320 x 64 > 160 x 32 > 80 x 16 > 40 x 8 > 20 x 4 > 10 x 2 > 5 x 1 のようにサイズを縮小できます)、3 次元テクスチャの場合はビットマップサイズを 2^n にします。MIP マップは、幅と高さが 2^n であるビットマップ(256 x 256、512 x 512、1024 x 1024 など)から生成されます。Flash Player または AIR では、幅または高さが奇数になると、ミップマッピングは終了します。
update 2010-04-09
kamijoさんのブログに追加投稿がありました。
Flash コンテンツパフォーマンス最適化 (AS3 編)
このエントリーの中にリンクされているSome ActionScript 3.0 Optimizationsの最適化ネタは一度は読んでおくべきだと思います。
for i loop の条件は array.length
を毎回評価しないようにする。
// bad for (var i = 0; i < array.length; i++) // good for (var i = 0, max = array.length; i < max; i++) |
定数も複数回使う時は一度変数に代入して再利用する。
bit演算も高速化の助けになる。
4 * 2 -> 4 << 1
4 * 4 -> 4 << 2
4 / 2 -> 4 >> 1
4 / 4 -> 4 >> 2
update 2010-04-10
野中先生もAdobe devnetへ寄稿されてたんですね。
ActionScript 3.0の最適化
ActionScript 3.0におけるパフォーマンス向上のヒント
型指定は必須。
差が出るのはループの条件指定。
Mathクラスの数値演算の項は何となく理解できる。
quasimondolibsのMathutilsはネイティブMath関数群を高速化して置換えてたもんなぁー。