专注于产品开发平台解决方案

引领数字体验未来:UI框架性能探析
分享:

本文翻译自:Shaping the Future of Digital Experience - UI Framework Performance

原文作者:Qt Group 产品营销经理 Matteo Capelletti

校审:Rita Qian


在之前的博文中,我们讨论了UI框架的基本元素——即一套现成的解决方案,可以用于快速跨平台开发并有效缩短UI应用程序的上市时间。在本篇博文中,我们就来探讨一下如何实现流畅无缝的性能,让您的应用程序能够真正在市场上打动用户。但首先,我们需要明确什么是“UI应用程序”,以及它与其他类型的可视化软件(如视频游戏或设计创作工具)的区别。

所谓的“UI应用程序”

尽管人们常常以为自己知道“UI应用程序”是什么,但对于到底哪些应用程序才可以被称为UI应用程序存在一定的误解。这种误解可能会对我们选择正确的开发框架来创建UI应用程序产生负面影响。

考虑到图形界面是UI应用程序的一个重要方面,但它只是众多方面之一。UI应用程序不仅仅是在屏幕上渲染的图形,而是一个可视化界面,用于实时运行于后端的数据、服务和函数。通常情况下,它也不是那种在整个屏幕上呈现单个场景,消耗所有可用的系统资源的独立软件,而是一个各类UI元素的捆绑包,如嵌入式应用程序和服务、小部件、图表、交互区域和视图,它们共存于一个或多个屏幕上,以并行的方式为用户提供所需的多任务信息。在UI应用程序中,多个进程会竞争有限的系统资源,例如内存、运算能力、存储,通常也包括低功耗设备的电能。我们会谈到UI框架提供的一些智能解决方案,利用它们来有效地处理并发任务。但首先,我们需要更详细地了解UI应用程序的结构和逻辑。

布局(Layout)

UI布局是一种分层结构,由来自多个应用程序的多个图层构建而成,占据屏幕的不同部分。用户可以通过触摸和其他形式的输入与UI层进行交互,直到达到他们想要的应用程序或功能。不同类型的交互可以实现不同的操作,例如触摸图标或按钮可以打开应用程序或服务,滑动可以改变视图,缩放、滚动等操作都是由屏幕的特定部分上的具体动作触发的。

此外,UI应用程序通常具有高度的可定制性,可以让用户更改整体外观风格、移动小部件以及调整UI的主题和布局,同时保持UI的整体预期功能不变。

状态(States)

UI行为是通过状态的形式进行设定的,从而确定用户可以与之交互的不同视图。UI的逻辑由状态之间的导航定义,即从给定状态通过什么操作可以到达哪些状态。然而,即使在简单的应用程序中,状态的数量也可能非常大。因此,需要使用灵活、可靠和高效的工具来处理状态和控制应用程序流程,例如专用的状态机框架提供的工具。

转换(Transitions)

为了在用户界面上吸引用户的注意力,过渡效果需要以平滑、渐进的方式展示,避免突然的视觉变化带来的不适感和干扰。这时候,缓动函数就派上用场了,它能够设定状态如何随时间变化而转换,使得UI的状态转换过程更加温和、自然。

UI应用程序具有独特的内部结构、视觉布局和逻辑流程,与其他类型的可视化软件(如设计创作工具或视频游戏)存在根本性的区别。因此,我们需要UI框架提供专门的工具来正确、高效地管理。虽然UI应用程序的特性可能不断增多,但必须使用适当的工具来实现它们,以确保其符合良好的用户体验。

Runtime(运行时)

在开发方面,UI框架提供了一系列库和解决方案,用于为PC应用程序创建界面。同时在部署方面,它还提供了UI引擎,也就是runtime,用于在终端设备上运行应用程序。例如,智能手表、智能座舱或智能家居电器的显示屏都包含一个框架UI引擎实例,用于在特定的硬件和软件架构上运行应用程序。

尽管设备种类多样,但它们的计算能力和能源供应通常却十分有限,令人惊奇的是,无论底层系统如何,单个运行时引擎都能够控制每个功能和服务的生命周期,管理它们之间的交互,以及对每个任务进行资源分配。UI引擎是专门用于处理具有特定性能需求的竞争进程而设计的。

性能

数字设备的资源通常受限,处理和存储能力也非常有限。相比用于家庭娱乐或游戏的强大台式电脑,为电器、汽车和可穿戴设备提供驱动的设备能力更为有限。然而,硬件并不是应用程序最终性能和图形质量的唯一决定因素。UI框架可以提供一系列现成的解决方案,以在受限环境中优化资源消耗,实现在低占用空间的同时启用多并行服务和高级图形。

事件驱动架构

对于UI软件而言,允许单个应用程序使用所有可用资源或具有无限的启动时间是相当罕见的。嵌入式设备,如消费电子产品、工业、医疗和汽车应用程序,需要快速启动,并且只有极少的计算资源可以并行运行多个功能和服务。为了限制资源使用,UI框架提供了一系列优化机制,确保平滑的性能和无缝的响应能力。

UI框架在底层采用事件驱动架构,利用事件来触发功能、在跨解耦服务间通信。这种架构使得应用程序在未使用时保持空闲,最大程度地减少所需的内存、CPU和GPU的数量。这释放了可以动态分配给其他应用程序的计算资源,同时也有利于在供应有限时节约能源。动态内存加载和卸载与UI虚拟化相结合,允许只在需要时(即按需)将UI元素加载到内存中。

除了数据虚拟化外,UI框架还支持:

  • 后台加载UI和资源

  • 线程化处理跨多个CPU核心的并发任务执行

  • 内存管理,自动处理对象的分配和释放

  • 缓存图像、字体和其他资源,有助于加速这些资源的加载和显示

  • 优化数据结构,比标准的C++数据结构更高效

  • 提供包括链接时(link-time)优化的编译选项,以便在编译时寻找整个程序的优化空间。

总之,UI框架通过优化UI的内部流程和减少内存占用来帮助开发者提高UI的效率和响应性。但这还不是全部。

性能分析

虽然应用程序原型可以展示应用程序在桌面PC上的预期行为和外观,但这是一种不受限制的环境,并不能够反映实际的资源需求。因此,在这个阶段很少有应用程序可以顺利地移植到实际的目标平台上。

性能分析是指收集有关应用程序使用CPU、内存和网络带宽等资源的数据,并对这些数据进行分析,以便识别应用程序的瓶颈、延迟和内存泄漏等问题。例如,复杂的3D模型、高密度着色器和广泛使用的着色器效果可能会导致应用程序无法以每秒60帧的稳定速度运行。性能分析器有助于检测此类渲染瓶颈,发现待优化的代码、消耗过多资源的后台任务、内存泄漏、未优化的图形和过于频繁的UI更新等问题。如果没有正确的工具,这些问题需要花费很长时间和不必要的精力才能被检测到。

当实际的目标设备不可用时,UI框架的模拟器可以模拟应用程序在目标设备上的行为和运算能力,帮助开发者检查应用程序的性能和行为,就像在实际设备上运行一样。

在硬件尚未确定或需要重新考虑的情况下(例如芯片短缺),跨平台UI框架可以确保软件开发和部分测试可以在不受影响的情况下进行,从而最大程度地减少对上市时间的影响。

质量保证

除了流畅的性能外,应用程序如果还需要符合安全可靠的行业标准并遵守通知机构设置的要求,为了实现自动化测试过程、识别未经测试的代码并检测代码不良特征或编码指令偏离,集成质量保证工具的存在将大有裨益。尤其是在安全关键应用和相关认证领域(例如医疗),这种质量保证组件变得至关重要。

行业痛点
解决方案
应用案例