いくつかの更新:イベントをリッスンし、バインディングを使用する以外は、アプリでは何もしていません...つまり、ChangeWatchersも手動ポーリングもありません...イベントを待つだけです。私たちは常にFMSに接続しているので、そのためのオーバーヘッドがありますが、それは最小限です。Flexではバインディングはあまり効率的ではなく、[Bindable]メタデータキーワードをクラスに直接追加するのは適切ではないことがわかりました(大量で、クラスが多い)。これについてはあまり行っていませんが、アプリのパフォーマンスをもう少し向上させる1つの方法です。[Bindable(event = "usersUpdated")]を使用すると、バインディングを制御でき、クラス内の関数内からdispatchEvent(new Event( "usersUpdated"))を実行した場合にのみ起動します。 'ユーザー'のセッター。
FlexまたはAIRでSystem.gc()を使用したことがある人なら誰でも、Flexのガベージコレクションは冗談だと言うでしょう。これは部分的に実装された機能であり、誰もそれを信頼していません。これにもトリックがあります...2回呼び出し、フレームを待って、もう一度呼び出します。古いオブジェクトをクリーンアップする可能性がありますが、指を交差させないでください...Flexは必要なことを実行します。
また、一時オブジェクトを使用して、起動されるバインディングの数を減らします。それ以外の...
myUser.location = new Location(); myUser.location.state = "CO"; myUser.location.city="デンバー";
行う...
var tempLoc:Location = new Location(); tempLoc.state = "CO"; tempLoc.city="デンバー"; myUser.location = tempLoc;
前者は、場所にバインドされたものすべてに3つのバインディングを起動します。*一方、後者は1つのバインディングのみを起動する必要があります(実際には、Flexの処理方法により、通常は余分になります)。
バインディングは、視覚的にリッチなアプリケーションに多数存在するまでアプリを強制終了しません。バインディングとレンダリングは、Flexの最も遅いジョブのようです。
もう1つの興味深い点は、Flex Builderで新しいFlex3アプリを作成し、ブラウザーで実行することです。私たちのテストでは、MacBookProでCPUが8〜10%の間に留まっていることが示されました(アプリがアイドル状態で、ブラウザーウィンドウが非表示の場合)。 現在、アプリケーションは約20%で着実に実行されており、ビューの変更などを処理するために急上昇しますが、常に20%に近いレベルに戻ります。私たちの最初の懸念は、CPUを非常に高くし、約40〜50%(MBPでは...すべてこのマシンに関連して)ホバリングしたままにするメモリリークまたは何かが暴走したことでした。Degrafaへのすべての参照を削除しました。パフォーマンスが大幅に向上していることに気づきましたが、すべてを説明しているわけではありません。しかし、空のFlexアプリは啓発的でした。Flex自体は、アイドル状態のときでも、常に8〜10%のCPUを占有します。
さらに別の発見...Mateを使用している場合は、ビューの切り替えの処理方法に注意してください。MXMLでインジェクターとバインディングを使用することで、アセットを使用可能にし、使用されていないときに非表示/無効にするのは簡単ですが、Flexは、非表示/無効化に関してはあまり賢くありません。ビューをその場で作成し、完了したら破棄するのが最善です。最初の作成には時間がかかり、ビュー間の待機時間が長くなる可能性がありますが、表示マジック(プログレスバー、回転ディスクなど)を使用して、ビューが切り替わっていることを示し、ビューでcreationCompleteを待ってからそれにフェードインします。
また、視覚的にリッチなアプリの場合は、ViewStackに近づかないでください。独自のスタックを管理します。
これまでのところ、このスレッドはあらゆる言語に共通する基本的なパフォーマンスの問題を取り上げてきましたが、Flexは多くの点で非常に特別な小さな男の子です(「特別」は必ずしも前向きなものとは見なされません)。非常に視覚的なプラットフォーム上に構築されているため、多くの落とし穴がありますが、RIA向けに構築されているため、Flash Playerはビデオやアニメーションなどを最適化できますが、Flexアプリは最適化されません。FlexアプリがFlashアプリと同じように機能することを期待しないでください。AS2とAS3のAVM(ActionScript仮想マシン)にも大きな違いがあります。
これは、Flexアプリのパフォーマンスの問題と潜在的な利益の表面を引っ掻いているだけです。これはダークアートであり、その理由は簡単にわかります。
コードオン、忍者。