ActionScript3.0 パフォーマンスチューニング - 野中 文雄 (著)
引き出せ!ということなので、引き出したいと思って読んでみました。
パフォーマンスチューニングについてまとめられた本てあんまりみかけないから期待しつつ。
感想
なんというか、「ちょっとパフォーマンスチューニングてのをしたいんだけどどうしていいか右も左もわからない」人向けには割といいんじゃないかと思いますが(けど、それパフォーマンスチューニングじゃないんじゃないかみたいなとこもちょいちょいある)、ある程度実力のある人にとっては既に知っている内容が多く、そういう人にはオススメできないかもと思いました。
本書が対象とする読者が、
- 自分の意図した動作を自分のスクリプトとして書きたい。
- スクリプトはどのように組立てればよいのか、どうすればより効率的な処理になるのかを知りたい。
- ステートメントひとつひとつの意味を理解して、自分で応用できるようになりたい。
なのでパフォーマンスチューニング入門書みたいなそんな感じですね。
問題
それはさておいて、この本若干問題がありまして、それが
パフォーマンスの計測をしていないこと。パフォーマンスがどれだけ改善されたかをみるためにも計測は基本中の基本だけど、「試してみたところ速くなりました」みたいな表記はるもののどれだけ速くなったかは特に言及されておらずちょっと物足りなさを感じてしまう。「速いのかー。そうかー。」で終わっちゃいそう。もったいない。逆に言うと自分でどれだけ速くなったか調べてもらうという意図があるんじゃないかとか。わかんないけど。
計測
ちょうど
ここで
PDFプレビューが見られるので「変数と関数にはデータ型を指定する」のサンプルを例にどのくらい改善されるのか見てみたいと思います。
測定のために書いたのが次のスクリプトで、処理1がダメな例とされるスクリプト01-01-006、処理2が良いとされるスクリプト01-01-05。
// 初期化
var my_array:Array = new Array(100000);
var t1:int = getTimer();
// 処理1
for(var i = 0; i < my_array.length; i ++) {
var element1:Object = my_array[i];
}
var t2:int = getTimer();
// 処理2
var nLength:uint = my_array.length;
for(var j:uint = 0; j < nLength; j ++) {
var element2:Object = my_array[j];
}
var t3:int = getTimer();
trace("処理1の処理時間: " + (t2-t1) + " msec");
trace("処理2の処理時間: " + (t3-t2) + " msec");
結果は
処理1の処理時間: 25 msec
処理2の処理時間: 12 msec
てことで自分の環境だと2倍ぐらい速くなりました。
やばい。テンション上がる。もっと速くしたい。
というモチベーションループが廻りますね。多分。
その他
Flashのパフォーマンスチューニングについてはこちらの特集がためになります。
身内なので紹介するのは気が引けるけどそれを差し引いても良い内容です。
最後は地道な努力が身を結ぶということで。