Qml性能优化总结

 Qt Quick
时间:

原作者:林斌
邮箱:richard.lin@qt.io

Qt Quick性能优化

  • 使用事件驱动
    • 避免定时轮询
    • 使用信号与槽
  • 使用多线程开发
    • C++多线程,QThread,或者C++11线程
    • Qml WorkerScript 元件
  • 使用 QtQuickCompiler
    • 在项目管理文件.pro文件中添加一行
    • CONFIG+=qtquickcompiler
    • 注意:qtquickcompiler的作用是第一次启动程序时,将qml文件编译成二进制的qmlc格式。在qt5.10版本默认打开。
    • 注意:Qt5.12会有新的qml代码生成器,性能比QuickCompiler更好。
  • 避免使用CPU渲染的元件
    • Canvas
    • Qt Charts
  • 使用异步加载
    • 图片异步加载
    • qml的Image元件有异步加载属性asynchronous,默认为false,设置为true就是异步加载。
    • 使用C++ 处理大数据加载。

JavaScript Code 关于 JavaScript的优化使用

  • 属性绑定

    • QML 优化了引擎,简单的表达式不会启动JavaScript,比如x: 10 + 2 * 5 这种可以即时计算的表达式,QML引擎会直接计算出结果x:20.

    • 避免声明JavaScript中间变量

    • 避免在即时求值范围外访问属性(immeediate evaluation scope: 绑定表达式所在对象的属性,组件中的id,组件中的根元素id)
    • 需要用到属性进行运算时避免直接写操作。
  • 属性解析
    • 避免频繁访问属性(在QML Profiler看到的调用频率比较高的部分,要尤其注意不要进行属性访问)

Qt Quick图片和布局优化

  • 降低图片加载时间和内存开销

    • 异步加载
    • 设置图片尺寸
  • 锚定布局

    • 在元素布局时,使用anchors锚布局比属性绑定效率更高。
    • 坐标>锚定>绑定>JavaScript函数。

元素生命周期设计

  • 使用Loader动态加载和卸载组件
  • 使用active属性,可以延迟实例化
  • 使用source属性,提供初始属性值
  • asynchronous异步属性设置为true,在组件实例化时可以提高流畅性。

渲染注意事项

  • 避免使用Clip属性(默认禁用),剪切损失性能
  • 被覆盖不可见的元素设置visible属性为false,通知引擎不绘制
  • 透明与不透明,不透明效率更高,全透明时设置为不可见。

使用Animation而不是Timer

  • Qt优化了动画的实现,性能高于定时器触发属性的改变Timer触发动画的方式性能低下,更耗电

0 评论