gpt4 book ai didi

apache-flex - itemrenderer 功能模型是低效还是只是示例?

转载 作者:行者123 更新时间:2023-12-04 02:37:27 24 4
gpt4 key购买 nike

我在某处听说或读到,出于性能原因,应该避免使用 itemRendererFunction,但由于我找不到该评论的来源,是否可能是文档中的示例代码效率低下?我创建了一个我认为效率更高的替代代码示例(尚未完成测试)。

这是文档中的示例代码。请注意,在每次迭代中都会创建一个新的类工厂[1]:

<fx:Script>
<![CDATA[

import myComponents.MySimpleItemRendererFunction;
import spark.skins.spark.DefaultItemRenderer;

private function selectRenderer(item:Object):ClassFactory {
var classFactory:ClassFactory;
if (item is String) {
// If the item is a String, use DefaultItemRenderer.
classFactory = new ClassFactory(DefaultItemRenderer);
}
else {
// If the item is an Object, use MySimpleItemRendererFunction.
classFactory = new ClassFactory(MySimpleItemRendererFunction);
}
return classFactory;
}
]]>
</fx:Script>

我的代码(未测试):

<fx:Script>
<![CDATA[


private var normalItemRendererFactory:ClassFactory = new ClassFactory(DefaultItemRenderer);
private var editableItemRendererFactory:ClassFactory = new ClassFactory(EditableItemRenderer);

private function itemRendererFunction(item:Object):ClassFactory {

if (item is String) {
// If the item is a String, use DefaultItemRenderer.
return normalItemRendererFactory;
}
else {
// If the item is an Object, use MySimpleItemRendererFunction.
return editableItemRendererFactory;
}
}
]]>
</fx:Script>

[1] http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS03d33b8076db57b9-23c04461124bbeca597-8000.html#WS94F31173-40D5-4ddd-B7B3-17D02BD57EAF

最佳答案

如果您将 itemRendererFunction 与 Flex 4.0 到 4.5 SDK 一起使用,则您的 List 中的项目渲染器不会被回收。这会对列表的滚动性能产生很大的性能影响。

在 Flex 4.6 中,他们改进了功能,以便在使用项目渲染器函数时可以回收项目渲染器。

您对上述示例所做的改进一针见血。第一个明显的改进是您避免了每次都创建一个新的类工厂。但还有更重要的事情,这将阻止列表回收渲染器(即使使用 Flex 4.6)。

itemRendererFunction 每次返回一个新的类工厂时,它会扰乱列表对项目渲染器的内部跟踪,并导致列表创建新的渲染器而不是尽可能地重新使用它们。这会对滚动产生相同的性能影响,并且将旧渲染器保留在内存中会带来额外的好处。

particular problem is discussed here .

关于apache-flex - itemrenderer 功能模型是低效还是只是示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com