記事の元ネタとなっている Optimizing Performance for the Flash Platform が更新されました。前のバージョンより 15 ページほど増えています。とりあえず、CPU 編の 「Timer と ENTER_FRAME イベント」 を更新しておきましたのでよろしければご覧ください。その他には主に AIR 関連のトピックが追加されています。
では、Optimizing Performance for the Flash Platform から最後の Tips です。
まず、Flash Player 10.1 から追加された新しいネットワーク関連の機能 2 点です。
サーキュラーバッファリング (circular buffering)
- ビデオをプログレッシブダウンロードで再生する場合、デスクトップ環境では (Flash Player 10.1 含む) ロードした FLV ファイル全体をローカルディスクにキャッシュする。Flash Player はキャッシュから再生を行う
- デバイス上では、
1. FLV のキャッシュに必要な領域が不足
2. 20 MB 以上のディスク領域 (もし無ければ 4 MB 以上のメモリ) が利用できる - この値はコンパイル時に設定可能
の条件でサーキュラーバッファリングが行わる - サーキュラーバッファリングでは、キャッシュファイルが一杯になると、ファイルの先頭から再利用される
- ファイル全体がキャッシュされないと再生できないファイル (MP4 の一部のファイル等) を保存する領域が足りないと Flash Player はそのファイルをダウンロードしない
スマートシーク (smart seeking)
- Flash Media Server 3.5.3 から Flash Player 10.1 にストリーミングを行うとスマートシークが使える
- 従来の動作は、シークが行われると、バッファされたデータは全て捨てられる
- スマートシークでは、シーク先がバッファされている範囲内だった場合、再利用できるデータはそのまま使われる。そのため、すぐに再生が開始され、ストリーミングに必要な帯域も削減することができる
あとは、Tips が 3 つあります。
SWF の分割
- SWF を複数に分割することで読み込みから起動までを高速化できる
- その際、アセットやロジックが重複してダウンロードされないように注意する
- RSL (Runtime Shared Library) を使って共通部分をダウンロードし、それを複数の SWF から getDefinition() メソッドを使って利用することが可能 - クラス定義、フォント、ビットマップ、サウンドなどが RSL 化できる
入出力エラー
- ネットワーク接続が不安定な場合に備えて IOErrorEvent.IO_ERROR イベントのリスナーを定義することが望ましい
- その際、エラーの発生をユーザーに知らせ、リトライができるようにすることを推奨
Flash リモーティング
- XML を使った通信はデータ量が多くなり、処理時間もかかるため、少量のデータを送受信するのに適している
- 大量のデータを送受信する場合は、AMF の使用をするべき
- AMF を使用する場合、サーバ側には ZendAMF, FluorineFx, WebORB, BlazeDS などのモジュールが必要
- Flex SDK を使うと、AMF が簡単に利用できる (Flash Professional でも Flex フレームワークの SWC を利用可能)
P2Pライブソリューション「シェアキャスト」を手がけています。10.1は大いに期待できそうですね。
高野さん、こんにちは。
コメントありがとうございます。
シェアキャストにも Flash Player 版が!! という日が来ますように。