【发布时间】:2010-11-01 16:32:46
【问题描述】:
我正在 Flex 3 中构建我的第一个 Flex 自定义组件。它是一个基于“网格”容器类的数据表,每个单元格中都有一个简单的文本标签。 (DataGrid 和 AdvancedDataGrid 不是我需要的合适起点。)该组件在使用较小的表时运行良好,但我尝试使用较大的表对其进行压力测试,结果令我失望。
组件创建过程有一些缓慢的地方,但这些都是我可以优化的,不是我主要关心的。更让我担心的是 Flex 框架本身的限制。
这个“大”样本表中有超过 7000 个单元格。这是较大的,但仍然比我需要容纳的最大数量少 1-2 个数量级。在标准 Grid 结构中,组件的主要部分由一个 Grid 组成,该 Grid 包含 400 个 GridRows,每个 16 个 GridItem,加上一些其他较小的辅助 Grid。
表格呈现后,我发现以下内容:
- 与鼠标相关的事件触发缓慢。具体来说,我在每个表格单元格上注册了 rollOver/rollOut 事件处理程序,让我突出显示指针下的单元格。在一张小桌子上,我可以很快地将鼠标移到桌子上,高亮会实时跟随指针。对于较大的表格,突出显示非常不稳定,每秒仅更改两次,跳过许多单元格。
- 如果我将鼠标光标放在组件上并将其留在那里,我的 CPU 将被锁定(无论如何是一个处理器内核),并一直保持这种状态,直到我离开组件,当它下降到空闲时。我的组件此时根本没有做任何事情。
感觉 Flex 根本无法扩展以支持这么大的组件树。我不寒而栗地想象它会如何处理 100,000 个细胞。也许我正在推动 Grid 超出其预期用途,但每个表格单元格有一个对象似乎不是一个不合理的模型,树中有大约 14,000 个对象(每个单元格一个 GridItem 和一个标签)似乎相当适中。
我还没有从 FlexBuilder 分析器中获得有用的数据;我在做这个工作。目前,我最大的问题是:
- 我真的通过这个适度的测试来突破 Flex 的极限吗?
- 我对这个组件的处理方法是否完全脱离了基础?
我在 WinXP 上的 Firefox 下的 Flash Player 9 上运行它。
【问题讨论】:
-
Eh... 对于任何小部件管理器来说,这种设计都会变得相当缓慢。您通常最好使用一种设计,该设计只为在任何给定时间点实际需要在屏幕上显示的内容创建元素,并根据需要填充它们以反映用户想要查看的内容(响应滚动、搜索等)
-
听起来重新考虑是为了......我希望用户能够以当前架构支持的方式无缝滚动浏览所有数据,但听起来我会必须手动管理而不是依赖框架。哦,好吧...我确实说过这是我的第一个 Flex 组件。 :)
-
您可以创建一个自定义滚动条,将新数据输入网格以模拟这种效果。这样你只需要数据,而 Flex 只分配一页所需的显示对象数量。
标签: apache-flex flash actionscript-3 flex3