2.qml性能问题

1.渲染机制

这篇写的很好: 跳转
QWidget
cpu渲染,移动开发不友好
但是对低性能设备非常友好
QQuick
gpu渲染,吃显卡

2. 注意事项与优化

如果你生产环境的设备显卡不太行的话
使用qml开发是有点不友好的
qml开发效率肯定是非常快的,布局起码比qwidget快很多
但是动态数据不友好

我们在qml中可以使用loader进行动态加载,同时也可以加上asynchronous进行异步加载
我只能说掉帧严重,显卡差的话
一般动态数据我们考虑 listview ,gridview , tableview 等组件
listview ,gridview 不适合渲染复杂的itemdelegate
如果绑定scrollbar, 你会发现scrollbar 老卡了,为什么呢
因为scrollbar 是可以快速滑动的,快速滑动的时候,loader没完全加载出来不就卡爆了吗?

呵呵,显卡差到qml的便利性都没得了,叫老板给你升级gpu,老板跟你说成本高不给加,我说那用回qwidget,老板说都老东西了,以后升级肯定不方便,那qwidget加qml混合使用呢?老板说都用qml了那还用qwidget干嘛?我…

说回正题,以下是我的优化方案

优化方法

①所以—如果显卡不太好就得采用分页显示动态数据的办法了,这个时候就用repeater配合column或者row或者grid就可以完成了,不要用复杂的listview,gridview,tableview,最好数据源处理好了的
,从c++获取到直接用,不要出现复杂处理在qml, 如果你是静态行稳的雅痞。。。。

②尽量屏蔽-------console.log(无厘头打印) ------重写他们用一个变量__DEV__管理是否打印,非常影响页面刷新

③尽量不要用qml的绑定binding动态变量,用手动赋值取值的的方式,也不要使用计算属性,计算属性加入逻辑之后的动态变量,你给你自己的qml写一个paintEvent方法专门用来刷新页面 写个setparam getparam 负责赋值取值,全部给组件设置id,通过id赋值取值

④Image图像加载,全部asynchronous=true异步加载,
所有的图片只要清晰通通给我压缩,压缩到最小承受度

⑤如果不需要背景就不要用rectangle, 用item就行了

⑥尽量不要操作透明度opacity,会影响渲染速度,
底层肯定是有对透明度有算法的,你渲染的面积越大,肯定越费时间
当然逼不得已,一定搞个透明图层,那肯定可以用

⑦抗锯齿antialiasing尽量不要开,尽量不要设置圆角radius,
搞圆角能拖垮渲染速度3/4倍,不信你自己在paint事件试试就知道了

⑧你派生了QQuickPaintedItem 制作的自定义控件吗?
重绘paint事件,卡爆了吗?我只能说卡肯定是卡,比不过qwidget的3/4倍
fps60 指的是 frame per 60 每秒60帧 , 但是显卡垃圾,根本就没有这种能力
假设你设计一个图像编辑器, 很好,记住paint里面不要有逻辑, 比如矩形,圆形,三角形, 你先粉分别创建
他们的list 容器管理 , 在painted 里面直接绘画
不要变更太多的状态,什么是状态?字体,笔 ,刷子,能不变尽量不变,
如果要做逻辑判断你在外面做好再调用 update 渲染,让cpu跑逻辑,让gpu跑渲染,你放到paint里面那不就是渲染还得等你cpu逻辑渲染逻辑渲染吗 那肯定卡了,逻辑跟渲染一定要分割开来
a)逻辑跟渲染分离
b)update 设置绘制范围,一般是视口viewport范围
c)paint 状态不要高频率切换
d) 抗锯齿不影响的话尽量不要设置

⑨显卡太差,多页面切换都有问题,我真的是c了个dj,用popup的open()都能渲染半天,
这又得了解qml的机制,原来visible控制渲染不渲染,open里面就执行了visible =true, 你如果qml文件太复杂,就会影响到打开页面的速度。那完了,我的qml就得很复杂的怎么办呢?用过ps吗? 知道图层概念把,你弄多层,使用z 就是深度
我们z=1视为不可见层
z=2为背景层,我们将原来的背景换成Item不要让他吃我们的性能,我第⑤条里面说的
z=3为可见层,也就是给用户看的

显卡太差,不要用loader诸如此类的动态加载页面,除非简单页面
用静态页面,而且不要设置visible吗,非也,你只设置z控制图层,他也是会被渲染的,
我的意思就是简单的图层用loader ,看起来打开也很顺畅的用visible控制, 复杂的就用z控制,这样子懂了把

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱搞事的程小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值