私は最初のFlexカスタムコンポーネントをFlex 3で構築しています。これは、各セルに単純なテキストラベルを持つ 'Grid'コンテナクラスに基づくデータテーブルです。 (DataGridとAdvancedDataGridは私のニーズにとっては適切な出発点ではありませんでした)小さなテーブルを使用することでかなりうまく動作しますが、大きなテーブルを使用してストレステストを試みましたが、結果に失望しました。多数のUIオブジェクトを持つFlexアプリケーションは==遅いですか?
コンポーネントの作成プロセスには、いくつかのスロースポットがありますが、それらは最適化する権限があり、私の主な関心事ではありません。私が心配しているのは、Flexフレームワーク自体の限界と思われるものです。
この '大きな'サンプルテーブルには、7000個以上のセルがあります。これは大規模ですが、それでも私が対応する必要がある最大サイズよりも1〜2桁小さいです。標準グリッド構造では、コンポーネントの主要部分は、それぞれ16個のGridItemからなる400個のGridRowsと、それ以外の小さな補助グリッドからなるグリッドで構成されています。
表はレンダリングしたら、私は次を見つける:
- マウス関連のイベントは、火災に遅いです。具体的には、各テーブルセルにrollOver/rollOutイベントハンドラを登録して、ポインタの下のセルをハイライト表示させます。小さなテーブルでは、テーブル上でマウスをすばやく動かすことができ、ハイライト表示はポインタをリアルタイムで追従します。大きなテーブルでは、強調表示は非常にぎくしゃくしており、1秒あたり約2回しか変化せず、多くのセルをスキップします。
- マウスカーソルをコンポーネントの上に置き、そこに置いておくと、CPUが固定されて(プロセッサコアが1つ)、アイドル状態になったときにコンポーネントから離れるまでそのままの状態になります。私のコンポーネントは、この時点では何もしません。
Flexはこのようなコンポーネントツリーをサポートするために単純に拡張できないように感じます。私はそれが100,000個の細胞でどのように振る舞うかを想像しています。おそらく私はグリッドを意図した使い方を超えて押し進めようとしていますが、テーブルセル当たりのオブジェクトを持つことは不合理なモデルのようには見えず、ツリー内の14,000個のオブジェクト(1つのGridItemと1セルあたりのラベル)
私はまだFlexBuilderプロファイラから有用なデータを取得していません。私はそれに取り組んでいます。今のところ私の最大の質問は次のとおりです。
- 私は本当にこの控えめなテストでFlexの限界を押していますか?
- このコンポーネントのアプローチは完全にオフベースですか?
私はこれをFirefoxのWinXPでFlash Player 9で実行しています。
Eh ...そのようなデザインのウィジェットは、ちょうどどのウィジェットマネージャにとってもかなり遅くなります。通常は、特定の時点でスクリーン上に実際に必要な要素を作成するだけの設計を行い、ユーザーが表示したいものを反映するために必要なときに配置します(スクロール、検索など) – Shog9
私はユーザーが現在のアーキテクチャでサポートされている方法ですべてのデータをスムーズにスクロールできるようにしたいが、これを管理する必要があるように思えるフレームワークに頼るのではなく手動で実行します。 まあ...私はこれが私の最初のFlexコンポーネントだと言っていました。 :) – Aron
このようなエフェクトをエミュレートするために、グリッドに新しいデータを送るカスタムスクロールバーを作成することができます。この方法では、データだけが必要で、Flexは1ページに必要な表示オブジェクトの数だけを割り当てます。 – CookieOfFortune