在商业应用开发中,用户界面(UI)控件的性能至关重要。Telerik公司深知这一点,并一直致力于确保其SilverlightUI控件能够提供无与伦比的性能。本文将探讨Telerik在设计Silverlight控件时采用的一些关键技术,以及这些技术如何帮助提升性能。
为了保持控件性能的最优,Telerik在其数据密集型控件中引入了UI和数据虚拟化的概念。最简单的虚拟化场景是将元素放入VirtualizingStackPanel中,这样只有屏幕上可见的UI元素会被生成并占用内存。例如,如果有一个包含10,000个项目的下拉框,只有大约15个可见的项目会被创建,其他的项目存在于数据集中,但不需要视觉元素。基于这一核心概念,开发团队已经开始将虚拟化技术应用到以下控件中:
Telerik Silverlight Grid通过结合UI虚拟化和容器回收技术,优化了对大数据集和小数据集的处理。即使在发生虚拟化的情况下,每次单元格进入视图时,都会为其创建一个新元素,这会导致大量流量来回于垃圾回收,意味着在执行操作甚至仅仅滚动网格时,内存会被占用和释放。容器回收是解决方案,它在滚动、分组和排序数据时创建一次数据项的容器,然后重复使用。RadGrid简单地重用它已经创建的元素,有助于实现闪电般的滚动速度和客户端数据操作。
在许多情况下,层次数据集不仅仅是十到十五个项目,而是可能包含数百甚至数千个节点。使用树形视图时,有几个选项,因为层次数据结构在利用性能和提供高性能树形视图所需的功能方面提供了一些独特的挑战。一个可以利用的选项是按需加载功能,它允许只在需要时加载和创建数据,从而减轻控件的初始加载。在典型的场景中,这意味着从创建少量元素开始,最终在内存中管理和使用资源的元素数量增加到几百个。当一个项目被选中时,子项目被加载和创建;在此之前,只需要担心最初在根节点加载的视觉元素数量。
数据虚拟化方法也在Telerik Silverlight Chart中带来了显著的性能提升,即使是处理百万条记录。关键在于并非所有数据都真正显示在屏幕上——它是被总结的。RadChart使用一种称为抽样的技术来实现这一点。控件将数据分成组,并使用提供的多种抽样函数之一(甚至可以编写自己的)汇总每个组。最终结果是,图表总结了真实数据,同时性能无限提升。为了更容易地深入钻取和浏览整个数据源,还提供了缩放和滚动功能,以及修改后的RadSlider,使其更方便浏览。
开发团队已经竭尽全力确保在使用Silverlight的RadControls时有多种访问和消费数据的选项。利用Silverlight框架提供的丰富数据绑定引擎,有多种方式来填充控件。
使用WCF服务可以控制通过定义的操作在客户端之间发送和接收数据。轻松地将RadControl的.ItemsSource绑定到操作的结果数据集上,或者在应用程序中处理之前使用它进行复杂操作。
ADO.Net数据服务在与实体框架一起工作时非常有用,它有助于使用http请求在客户端和服务器之间发送和接收数据。
Telerik一直在跟进WCF RIA服务的最新版本,并致力于与Silverlight 3官方发布和Silverlight 4 CTP发布无缝支持。利用WCF RIA服务,可以快速轻松地设计一个数据层,包括元数据和验证,它在服务器和客户端之间维护对象模型,并允许轻松操作数据。
当人们第一次接触Silverlight时,他们会遇到一个问题,那就是创建一个控件模板需要多少行XAML代码,更不用说后端真正使控件工作的所有代码了。考虑到像RadGridView这样的控件,它有层次结构、添加新行和行选择等不同的视觉状态,这只是其中的几个。考虑到这一点,团队已经开始努力减少所有模板中的视觉元素,以达到几个目标。