« Androidはクライアントサイドの技術革新を止める | Main | GoogleはAppEngineで本気のビジネスをしようとしている »

2009.07.09

iPhone3G向けパフォーマンスチューニングを考える

自分が所持しているのはiPod Touch2G(CPU:532Mhz)なのですが、知人が3GS(CPU:600Mhz)を購入したので3G(CPU:412Mhz)をお借りすることができました。
早速Displex v1.1を3GにDLしてみたのですが、そのもっさり感に愕然としました。

まず番組表ダウンロードでUIProgressBarが激重、その後の番組表のスクロールもカクカクでした。
これはだいぶ酷い体験をさせてしまったなぁと反省しきりです。

今回はiPhone3G向けに施したチューニングについて幾つか書いてみます。

番組表ダウンロードで時間がかかっていたのは、各番組の時間長の計算において、開始時刻と終了時刻のNSStringからNSDateFormatterを使ってNSDateに変換する、という処理を生真面目に書いてしまっていたからです。この処理を時刻の文字列から分単位のintに変換してその差分をとる形に変えることで、一気に10倍以上速くなりました。これでダウンロードメーターはサクサク進むようになりました。

次が、UIScrollViewの設定です。番組表の上下左右の端に到達した際に、慣性が働いてバウンドする動きがデフォルトではonになっていました。200個オーダーのUIViewをUIScrollViewのcontentsに格納した状態ですと3Gではカクカクになります。これは端に到達しない状態でも常にスクロールが重くなるので注意が必要です。この動作をdisableにするには、下記のpropertyをすべてNOに設定する必要があります。bouncesはデフォルトでYESなので明示的に指定しないと効きません。

bounces = NO alwaysBounceVertical = NO alwaysBounceHorizontal = NO

上記の変更は3Gだけで効かすのではなく、すべてのモデルに適用しました。これでiPod Touch2G/3GSでは、さらなる素早い操作感が得られるようになるという副次的なメリットも得られました。Displex v1.2として本日申請したので、順調にいけば2週間後くらいにAppStoreに公開されると思います。

さて、1Ghz未満のCPUでは、100Mhz単位の違いで随分の操作感が変わってきます。iPod Touch2GとiPhone3GではGPUが同等で、完全にソフトウェアスタックに互換性があっても、これだけのアプリ体験の差が生まれてしまうのだと実感することができました。では、Androidのように画面解像度やCPUアーキ、入力デバイスまで異なってきた場合にはどうなってしまうのでしょうか?動作検証を考えると莫大な工数を要することは容易に想像できます。HTCはすでにAndroid搭載ケータイを数モデル出してしまいましたが、初期開発コストは想像以上に高い、なんて言っていたのが懐かしくなるほど、今後はその比ではないレベルでアップデート対応工数がかかってくるでしょうね....。

|

« Androidはクライアントサイドの技術革新を止める | Main | GoogleはAppEngineで本気のビジネスをしようとしている »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/1288/45579138

Listed below are links to weblogs that reference iPhone3G向けパフォーマンスチューニングを考える:

« Androidはクライアントサイドの技術革新を止める | Main | GoogleはAppEngineで本気のビジネスをしようとしている »