3 ms·
I haven't seen any performance issues on desktop, but on mobile they really stand out. I have separated logic into QML, and even experimented with implementing
by _camm 3y ago
I haven't seen any performance issues on desktop, but on mobile they really stand out. I have separated logic into QML, and even experimented with implementing custom QQuickItems in some places.
Here are some issues I've seen related to performance on mobile:
1) Opening a larger app is really slow (maybe 3-5 seconds), but works okay for smaller apps. I'm not sure what's going on behind the scenes and haven't had time to dive deep there yet, so this could be specific to me.
2) Rendering full pages is quite slower than native, as is QML rendering in general, even when using the QML compiler (which compiles your QML to C++)
3) Qt text rendering is a bit slow too, but you may not need i.e QTextDocument if you're implementing a text editor of some sort.
- ahartmetz 3y agoRegarding your first point, instantiating a lot of QML items is usually what makes startup slow. You can use Loaders to load things on demand (and timer triggered Loaders to load stuff you will probably need but shouldn't delay startup). Make the Loaders asynchronous and timer triggered (async but immediately triggered still slows down startup) and switch them to synchronous when their contents are needed immediately. I have a component for it, it's 10-15 lines or so.
- rubymamis 3y agoThese performance issues are vastly different from what I experience on Desktop, so I'm curious to test my app on mobile. In my experience, C++ and QML outperforms comparable native apps by 4x. Regarding no.3, what do you mean by QTextDocument? My block editor is implemented by each delegate being a TextArea (inh: TextEdit), and it's very fast. One trick I've learned, is to use `reuseItems`[1][2] in ListView. It gives incredible performance boost. You'll need to adjust some things according to the onPooled and onReused signals, but it's a no-brainer for many use cases. [1] https://doc.qt.io/qt-6/qml-qtquick-listview.html#reuseItems-prop https://doc.qt.io/qt-6/qml-qtquick-listview.html#reuseItems-... [2] https://doc.qt.io/qt-6/qml-qtquick-tableview.html#reusing-items https://doc.qt.io/qt-6/qml-qtquick-tableview.html#reusing-it...
- _camm 3y agoQTextDocument is a class in Qt::Gui that many of the other text classes/components use. I was thinking you may have implemented your own text handling widget/item, but using delegates of text areas makes sense too. I will try reuseItems again. It's something I tried before briefly but thought it may have been causing some rendering glitches and removed it. Maybe because I didn't implement onResused or onPooled properly. Thanks!
- rubymamis 3y ago> I was thinking you may have implemented your own text handling Yes, but without QTextDocument as I had some problems with it. I had to implement my own undo/redo/copy/paste/etc. > It's something I tried before briefly but thought it may have been causing some rendering glitches Yes, I've experienced some (minor) glitches that I've yet to figure out how to fix. For example, the cursor seems to (sometimes) jump when creating new blocks. Sometimes delegates reappear with animation (while I turned them off when onPooled ran). I'm trying to figure out if I'm doing something incorrectly (highly probable) yet I don't get these issues without reuseItems. Sure, I hope it works out well for you (:
- coffeeaddict1 3y agoHmm, for 1 and 2 have you actually tried to profile your code? You can use the QML profiler to check which parts of QML compilation are slowing you down. Also consider using GammaRay [1] to see what's causing the rendering to be slow. [1] https://www.kdab.com/development-resources/qt-tools/gammaray/ https://www.kdab.com/development-resources/qt-tools/gammaray...
- _camm 3y agoI'll try GammaRay. Thank you for the recommendation. I've tried the QML profiler before but I always have difficulty getting it to work on Android.