「FITC Tokyo 2009」詳細レポート
#4 Grant Skinner氏「Quick as a Flash」ActionScriptの最適化
11月28日,ベルサール汐留にて,FITC Tokyo 2009が開催された。以下は,Grant Skinner氏のセッションのレポート。
Grant Skinner氏「Quick as a Flash」
ActionScript開発者なら,Grant Skinner(グラントスキナー)氏について説明する必要はないだろう。グラント氏のセッションでは,Flashの最適化について解説された。
写真1 kulerのサイトの最適化を行ったこともある,Grant Skinner氏
氏は「最適化はどうディプロイメントするか,そしてCPU,メモリの負荷をいかに抑えるかにある。これからのAIRやモバイルの時代では,これらをますます重要視しなければならない」と,最適化の必要性を述べ,また「ベンチマークをしない最適化は意味がない」と語った。ベンチマークをする上での注意点として,"プラットフォーム・FlashPlayer・環境"を考慮してテストする必要がある。例として,FlashPlayer 9/10 IDE/10 pluginでNumeric(Number,int,uint)の処理スピードのテストを示した。
FlashPlayer 9では,uintが重く,intとNumberがほぼ同等という結果がでた。
FlashPlayer 10のIDE(Flash CSに搭載されているDebug Player)では,uintが一番早く,intが次に,そしてNumberが一番重かった。
しかし,FlashPlayer 10のplugin(ブラウザに同梱されているRelease Player)では,uintとintがほぼ同等になり,Numberが一番重いことが分かったという。ここでは,uintとintが同等になったことよりも,Numberとの差が大きく開くことに,注意しなければならないと述べた。
つまり,int/uintとの尺度差が大きくなるために,10のIDEで感じているNumberの処理速度よりも,10のpluginの重さのほうがより遅く感じるということだ。これによって,スキナー氏は「どのような環境で実行されるかというのを想定してテストすることが重要」とした。
ベンチマークには,数値で計量できるものとそうでないものがあると氏は語る。もっとも簡単にパフォーマンステストのひとつとして,"実行時間の計測"を解説。これは,getTimer関数を使用し,Flashが起動してからのミリ秒を取得するのもので,以下のようにベンチマーク開始前と終了後でgetTimer()を呼び出し,その差分を計ることで実行時間を計るというものだ。
t = getTimer();
// stuff to benchmark
elapsedTime = getTimer() -t;
この手法については,氏自身が制作したパフォーマンステスト用のフレームワークPerformanceTest.asが紹介された。また,"フレームレートの計測"も解説。getTimerを使用して,差分を計る点は実行時間の計測と同様だが,差分を計るタイミングを1フレーム後にし,そこで計測した値を1000で割ることでフレームレートを算出する。フレームレートの使いやすい計測ライブラリとして,Stats.asを紹介した。
コードの最適化には,シンタックスの最適化,アーキテクチャの最適化,アルゴリズムの最適化の三種類に大別できるとしている。これらは車のメンテナンスに例えることができ,シンタックスはチューニングに,アーキテクチャはパーツの変更・修理に,そしてアルゴリズムはエンジンに置き換えることができるとし,大きくなればなるほど,相応のコストが掛かるとしている。氏は「パフォーマンスをよくするには最高のエンジンをチューニングをしっかりすることが重要」とし,大枠の実装を最適化するだけでなく,細かな部分の最適化と併用することで,真のパフォーマンスを発揮できることを説明した。
-
FITC tokyo 2009 詳細レポート
FITCはトロントをはじめ,シカゴ,ハリウッド,韓国,アムステルダムにおいて成功...
Tracked : #1 xingxx (2009/12/12, 09:06)


