0

FlexおよびFlash開発のパフォーマンスのヒントとコツに関するこのビデオを見たばかりです。Flexを使用および作成するときに測定される3つの事項がリストされています。

  • 創造
  • 検証
  • レンダリング

自分のプロジェクトでこれらの項目を測定するにはどうすればよいですか?私の場合、より具体的にはこの質問の場合、アイテムレンダラーを作成し、検証してレンダリングするのにかかる時間をテストするにはどうすればよいですか?

これらすべてのイベントの合計は、アイテムレンダラーのパフォーマンスをテストするときに使用する必要がある合計時間ですか?つまり、作成されたら、レンダリングと検証だけが正しいのでしょうか。

つまり、アイテムレンダラーがある場合は、次のコードを使用して作成時間を確認できると思います。

 <itemrenderer initialize="trace('initialized at='+getTimer())" creationComplete="trace('created at='+getTimer())" />

これが正しいかどうかわからない。しかし、検証とレンダリングについてはどうでしょうか?

4

2 に答える 2

1

あなたは正しい方向に進んでいます。

要点は、getTimerから2つの値を取得し、その差を使用して操作にかかった時間を決定することです。

理想的には、最初にgetTimer()がコンストラクターに含まれます。MXMLコンポーネントを扱っている場合。コンストラクターがないため、preinitializeイベントを使用します。この番号をtimer1と呼ぶことができます。

creationCompleteイベントは、コンポーネントの初期化が完了すると発生します。これには、最初の「レンダリング」イベントが含まれます。これをnnumbertimer2と呼ぶことができます。

実行:

timer2-timer1

Flexコンポーネントのライフサイクルの作成部分を追跡します。これには、最初のレンダリングプロセスも含まれます。

Flexコンポーネントの目的のため。Renderは、commitProperties()、measure()、およびupdateDisplayList()を実行するプロセスだと思います。これを追跡する秘訣は、何が無効にされたかに依存するため、どれが呼び出されるか(ある場合)がわからないことです。

検証は、コンポーネントの実行中の継続的なプロセスです。これにより、コンポーネントが再レンダリングされます。

私はおそらくrenderイベントを聞いてタイマーを開始します。コンポーネントのレンダリングがいつ完了したかを追跡する updateCompleteイベント。

于 2013-03-25T21:33:26.243 に答える
0

これが私がこれまでに得たものです:

timeLabel.text += "\nAbstractDataGridItemRenderer: " + testGridItemRenderer(AbstractDataGridItemRenderer, data, 50);

そして機能:

        public function testItemRenderer(renderer:Class, data:Object, iterations:int = 1000, resetTime:Boolean = false):int {
            var layoutManager:LayoutManager = LayoutManager.getInstance();
            var time:int = getTimer();
            var itemRenderer:IItemRenderer;

            for (var i:int;i<iterations;i++) {
                itemRenderer = new renderer();
                itemRenderer.data = data.name + i;
                itemRenderer.width = 300;
                itemRenderer.height = 30;
                itemRenderer.y = i * 30;
                itemRenderer.label = LabelUtil.itemToLabel(data, "label");
                addElement(itemRenderer);
                //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized);
                layoutManager.validateClient(ILayoutManagerClient(itemRenderer), false);
                //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized);
            }

            if (resetTime) {
                time = getTimer();
                for (i=0;i<iterations;i++) {
                    itemRenderer.data = data.name + i;
                    itemRenderer.label = LabelUtil.itemToLabel(data, "label");
                    //addElement(itemRenderer);
                    //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized);
                    layoutManager.validateClient(ILayoutManagerClient(itemRenderer), false);
                    //trace("initialized = " + ILayoutManagerClient(itemRenderer).initialized);
                }
                return getTimer() - time;
            }

            return getTimer() - time;
        }

これが正しいかどうかはわかりませんが、作業するためのいくつかの数値が得られます。ステージに追加したくないのですが、初期化するために追加する必要があるようです。

初期化は、オブジェクトがレイアウトの3つのフェーズ(コミットメント、測定、およびレイアウト)をすべて通過した場合に当てはまります。

アップデート。リセットフェーズを追加しました。これにより、レンダリングフェーズが終了します。

于 2013-04-01T19:21:00.813 に答える