组件语言参考 |
|
|
|
| DataGrid 组件(仅限 Flash Professional) > DataGrid 性能策略 | |||
由于显示的数据可以缩放大小,因此在使用 DataGrid 组件时,性能很快会成为一个主要的关注点。在速度相当快的计算机(使用到数据源的快速连接)上,显示了一百行的数据网格看上去可能相当不错。但一个月后,当数据增加到几千行时,用户可能会遇到迥然不同的情况。此外,如果到数据源的连接速度较慢,用户可能会遇到计算机速度较慢的情况。
以下是使用 DataGrid 组件时避免常见性能缺陷的一些建议。
向 DataGrid 组件中添加列和数据有两种方法:一种是通过 DataGrid.dataProvider 属性绑定预先构建的数据结构(一个对象数组),一种是使用 DataGrid 类方法(如 DataGrid.addColumn() 和 DataGrid.addItem())。应尽可能地使用第一种方法,即使用 DataGrid.dataProvider 属性绑定到预先构建的数据结构,因为这使得 DataGrid 可以在尝试在屏幕上绘制它所需的所有列之前创建这些列。
您可能很想创建 for 循环来对所需的所有列调用 DataGrid.addColumn()。虽然这种方法看起来是一种简单易懂的方法,但请不要使用该方法。原因是每次调用 DataGrid.addColumn() 时,数据网格都会添加事件侦听器、排序并重绘其自身以呈现新列。使用 DataGrid.addColumn() 创建 20 个列会导致 DataGrid 对自身排序并不必要地重绘 20 次。在 ActionScript 中构建数据结构不需要呈现或说明事件。在将该数据结构分配给 DataGrid 组件的 dataProvider 属性时,只需一次传递即可完成所有绘制。
DataGrid 组件接口使用户可以快速地执行搜索,以便搜索到更多的详细信息。只提供执行最初搜索所需的数据,然后可在另一个搜索步骤中提供任何特定行或单元格的详细信息。这种处理办法不仅最大限度地减少了填充数据网格所需的初始数据,而且最大限度地减少了用户必须浏览才能找到所需内容的信息量。在数据网格中选择了感兴趣的行或项后,可以再次对数据源进行调用以获取相关的详细信息。这些详细信息还可以在某些其它用户界面机制中(如多行文本字段和图形的集合)更好地显示。
如果可能并且能满足长期数据库的需要,则按照数据显示时的非常相似的格式和顺序来存储数据可以避免不必要的内存分配并节省用户计算机上的处理时间,而且能加快数据网格的响应时间。
用户很少希望在每次访问数据时都查看每一条可用的记录。重要的是了解数据使用者要查找的内容并为他们提供缩小搜索范围的方法。如果他们通常只查看给定周内特定主题的最新记录,则默认情况下只显示相对较小的数据组,并能够扩展他们查看数据的范围。
如果数据量可能非常大,请考虑使用分页功能来限制其大小,方法是提供可能通常从查询返回的数据子集。例如,对于某个查询可能从数据库中返回的 10,000 行数据,不必一次全部查看,而可以调用前 20 行的子集,然后利用附加的导航按钮触发一个调用以用下面的 20 条记录来填充数据网格。
通过 CellRenderer API,可以在数据网格中显示自定义单元格内容。有一种功能要求可能需要有条件地使用 ComboBox 组件或其它 UI 控件来填充数据网格。例如,根据在第二列中选择的内容,可以在第四列中重新填充或自动选择选项。尽可能将控件的此条件逻辑和重新填充操作与单元格的内容呈现过程区分开来,这一点是非常重要的。鼠标每次滑过单元格时,单元格即被选中,或者数据被更改,因此单元格中的内容或整个单元格有可能会重绘以保持最新状态。这意味着放入 CellRenderer 中的任何代码将不断重复地运行,因此应尽可能地减少在 CellRenderer 中执行的处理。如果您必须向 CellRenderer 中添加代码,则最好从 CellRenderer 中调用一个函数,以检测需要进行哪些更新并用最有效的方法进行更新。
数据网格实例需要绘制并加载完数据后,您才能访问数据网格的所有属性(如 focusedCell 和其它属性)。由于 DataGrid 没有"complete"事件,因此可以改用 UIObject.doLater() 来调用访问数据网格属性的函数。UIObject.doLater() 只在数据网格的属性可用后才执行该函数。若要查看示例,请参见 DataGrid.focusedCell。
|
|
|
|