0

我刚刚观看了有关 Flex 和 Flash 开发的性能提示和技巧的视频,它列出了在使用和创建 Flex 时要衡量的 3 件事。

  • 创建
  • 验证
  • 渲染

我如何在我自己的项目中测量这些项目?就我而言,更具体地说,对于这个问题,我如何测试创建我的项目渲染器、验证它并渲染它需要多长时间?

所有这些事件的总和是我在测试项目渲染器性能时应该使用的总时间吗?我的意思是一旦它被创建,那么重要的是渲染和验证是否正确?

我的意思是,如果我有一个项目渲染器,我认为我可以使用以下代码找出创建时间:

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

不确定这是否正确。但是验证和渲染呢?

4

2 回答 2

1

你在正确的轨道上。

要点是从 getTimer 获取两个值并使用差值来确定操作花费了多长时间。

理想情况下,您首先 getTimer() 将在构造函数中。如果您正在处理 MXML 组件;没有构造函数,所以我会使用 preinitialize 事件。我们可以称这个数字为 timer1。

组件初始化完成时会触发 creationComplete 事件。这包括第一个“渲染”事件。我们可以称它为 nnumber timer2。

履行:

timer2-timer1

跟踪 Flex 组件生命周期的创建部分。这也将包括第一个渲染过程。

出于 Flex 组件的目的;我会说 Render 是运行 commitProperties()、measure() 和 updateDisplayList() 的过程。跟踪这个的技巧是你不知道哪个——如果有的话——会被调用,因为它取决于什么是无效的。

验证是组件运行时的一个持续过程;这会导致组件被重新渲染。

我可能会听渲染事件来启动你的计时器;以及用于跟踪组件渲染何时完成 的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;
        }

我不知道这是否正确,但它给了我一些可以使用的数字。我宁愿不把它添加到舞台上,但似乎我必须这样做才能让它初始化。

当对象经历了布局的所有三个阶段时,初始化为真:承诺、测量和布局。

更新。我添加了一个重置​​阶段。这离开了渲染阶段。

于 2013-04-01T19:21:00.813 回答